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

3

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

我该如何实现我正在寻找的功能?

3个回答

6

针对当前问题(Selenium WebDriver在不等待页面加载的情况下转到页面),以下是相应的Python代码:

from selenium import webdriver

profile = webdriver.FirefoxProfile()
profile.set_preference('webdriver.load.strategy', 'unstable')
driver = webdriver.Firefox(profile)

并且:

driver.set_page_load_timeout(5)

3

这方面有很多问题,这里有一个例子。以下是一个等待所有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驱动器)有效。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接