【问题标题】:window.stop() through execute_script() is not working in chromedriver but works in geckodriverwindow.stop() 通过 execute_script() 在 chromedriver 中不起作用,但在 geckodriver 中起作用
【发布时间】:2019-05-03 11:27:40
【问题描述】:

当加载时间过长时,我会尝试停止浏览器。为此,我通过硒使用window.stop(); 方法execute_script()

Chrome失败

from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities


capa = DesiredCapabilities.CHROME
capa["pageLoadStrategy"] = "none"
driver = webdriver.Chrome(desired_capabilities=capa)

driver.get('http://deelay.me/15000/http://httpbin.org/ip') #loads a page after 15 seconds

driver.execute_script("window.stop();")

尽管由于pageLoadStrategy,我们可以快速控制浏览器对象,即driver -> 无;我们不能充分利用它。 即脚本仅在页面加载完全阻塞 15 秒后执行。

没有错误或异常,它只是挂起而不返回控件。

Chromium 73.0.3683.75 基于 Ubuntu 构建,在 Ubuntu 18.04 上运行

ChromeDriver 2.43.600233 (523efee95e3d68b8719b3a1c83051aa63aa6b10d)

Python 硒 3.14.1

与此相比,Firefox 浏览器会迅速执行脚本并停止加载页面。

Firefox通过

from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities


capa = DesiredCapabilities.FIREFOX
capa["pageLoadStrategy"] = "none"
driver = webdriver.Firefox(desired_capabilities=capa)

driver.get('http://deelay.me/15000/http://httpbin.org/ip') #loads a page after 15 seconds

driver.execute_script("window.stop();")

这里不仅可以停止执行,还可以调用新的 URL,这在 chrome 中是不可能的。

火狐 66.0.1

Geckodriver 0.23.0 (2018-10-04)

Python 硒 3.14.1

这是预期的行为还是错误。我这边有什么不妥的地方吗?

【问题讨论】:

  • 为什么需要停止浏览器?你的用例是什么?
  • @DebanjanB 当我测试我的网站时,我会限制它必须花费多长时间。这是由socket 超时完成的。当socket抛出异常时,我会停止加载并报告。
  • 在这种情况下,socket timeout 捕获异常并移出try-catch{} 范围,您为什么还要继续使用垂死的浏览器实例?
  • @DebanjanB 以便我可以在同一浏览器中测试其他链接?我相信 chrome 和 firefox 在浏览器必须具备的那种行为方面几乎是理想的。当我发现这一点时,我想我必须询问专业人士这是预期的行为还是错误以及如何解决?

标签: python selenium google-chrome selenium-chromedriver geckodriver


【解决方案1】:

您的主要问题似乎是关于使用 execute_script() 执行 window.stop(); 命令。

直到 ChromeDriver 74.0.3729.6ChromeDriverChrome 符合 OSS 并实施了 JSON wire protocol。然而,随着 ChromeDriver v75.0.3770.8 的推出,ChromeDriverChrome 现在通过 defaultW3C standard 兼容模式下运行/strong>。


解决方案

如果您希望 ChromeDriverChrome 的行为与 GeckoDriverFirefox 一样,则必须开始使用 ChromeDriver 75.0.3770.8 和其他匹配的二进制文件。


ChromeDriver 75.0.3770.8 到货

John Chen(所有者 - chromedriver)最近宣布:

我们很高兴地宣布 ChromeDriver 版本 75.0.3770.8 已发布,可通过ChromeDriver Downloads site 获取。此版本的 ChromeDriver 适用于即将推出的 Chrome 75 Beta 版本的用户。

在这个新版本中,最显着的变化是 ChromeDriver 现在默认以W3C standard 兼容模式运行。旧版 JSON wire protocol 仍受支持,但将来某个时候会被删除。

有关此版本中包含的其他更改,请参阅release notes


John Chen 的电子邮件截图

【讨论】:

  • 虽然这一切都是正确的,但它并不能回答任何问题。 w3c 合规性与通过 javascript 执行 window.stop 有什么关系?
  • 好的,我会检查较新的版本,并让您知道它们是否同样有效,特别是 window.stop()。谢谢
猜你喜欢
  • 1970-01-01
  • 2020-01-08
  • 2018-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-24
  • 1970-01-01
  • 2015-03-31
相关资源
最近更新 更多