在Selenium Python绑定中设置页面加载超时

2024-06-09 17:29:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用Python和Selenium模块编写一个bot,当我用bot打开一个网页时,由于该网页包含的外部源代码比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等价的代码。

我该如何实现我正在寻找的未来?


Tags: 模块代码元素网页get源代码botdriver
3条回答

关于这个,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"))

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)

这是一个非常乏味的问题。我刚做了以下几点,问题就解决了:

driver= webdriver.Firefox()
driver.set_page_load_timeout(5)
driver.get('somewebpage')

它使用Firefox驱动程序(以及Chrome驱动程序)对我有效。

相关问题 更多 >