【发布时间】: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