在 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 绑定中设置页面加载超时的主要内容,如果未能解决你的问题,请参考以下文章

python+selenium2自动化---设置元素等待

将 selenium_webdriver(chrome) 的流量绑定到特定的网络接口/隧道

如何在 Python 中使用 Selenium 设置动态显式等待?

如何使用PHP绑定设置Selenium(WebDriver和Server)

Python+Selenium自动化篇-8-设置等待三种等待方法

使用 Selenium Python API 绑定从 Chrome 获取 console.log 输出