在 Selenium Python 绑定中设置页面加载超时
Posted
技术标签:
【中文标题】在 Selenium Python 绑定中设置页面加载超时【英文标题】:Setting page load timeout in Selenium Python binding 【发布时间】:2015-11-23 10:42:23 【问题描述】:我正在使用带有 Selenium 模块的 Python 编写一个机器人。当我用我的机器人打开一个网页时,由于该网页包含的外部源比 dom 太多,因此加载所有页面需要很多时间。我使用显式和隐式等待来消除此问题,因为我只想加载特定元素而不是所有网页,它不起作用。问题是如果我运行以下语句:
driver = webdriver.Firefox()
driver.get('somewebpage')
elm = WebDriverWait(driver, 5).until(ExpectedConditions.presence_of_element_located((By.ID, 'someelementID'))
elm.click()
它不起作用,因为 Selenium 等待 driver.get() 完全检索网页,然后继续进行。现在我想写一个为driver.get()设置超时的代码,比如:
driver.get('somewebpage').timeout(5)
driver.get() 在 5 秒后停止加载页面并继续程序流程,无论 driver.get() 是否完全加载网页。
顺便说一下,我已经搜索了我上面说的功能,并且在那里遇到了:
Selenium WebDriver go to page without waiting for page load
但问题是,上面链接中的答案并没有说明 Python 等效代码。
我如何实现我正在寻找的未来?
【问题讨论】:
【参考方案1】:python
当前问题中提到的问题的等效代码(Selenium WebDriver go to page without waiting for page load):
from selenium import webdriver
profile = webdriver.FirefoxProfile()
profile.set_preference('webdriver.load.strategy', 'unstable')
driver = webdriver.Firefox(profile)
和:
driver.set_page_load_timeout(5)
【讨论】:
【参考方案2】:对此有很多问题,here is an example。这是一个等待所有 jquery ajax 调用完成或 5 秒超时的示例。
from selenium.webdriver.support.ui import WebDriverWait
WebDriverWait(driver, 5).until(lambda s: s.execute_script("return jQuery.active == 0"))
【讨论】:
【参考方案3】:这是一个非常繁琐的问题要解决。我只是做了以下事情,问题就解决了:
driver= webdriver.Firefox()
driver.set_page_load_timeout(5)
driver.get('somewebpage')
使用 Firefox 驱动程序(以及 Chrome 驱动程序)对我有用。
【讨论】:
以上是关于在 Selenium Python 绑定中设置页面加载超时的主要内容,如果未能解决你的问题,请参考以下文章
将 selenium_webdriver(chrome) 的流量绑定到特定的网络接口/隧道
如何在 Python 中使用 Selenium 设置动态显式等待?
如何使用PHP绑定设置Selenium(WebDriver和Server)