Python selenium 刷新如果等待超过 10s
Python selenium refresh if wait more than 10s
from selenium import webdriver
driver=webdriver.Firefox()
driver.get(url)
有时 webdriver 卡在文件或响应上,页面永远不会完全加载,所以行
driver.get(url)
从未完成。但是我已经获得了足够的源代码来 运行 我的其余代码。我想知道如果页面在 10 秒内未完全加载,我该如何绕过或刷新页面。
我试过了
from selenium import webdriver
from selenium.common.exceptions import TimeoutException
driver=webdriver.Firefox()
driver.set_page_load_timeout(10)
while True:
try:
driver.get(url)
except TimeoutException:
print("Timeout, retrying...")
continue
else:
break
但是行
driver.set_page_load_timeout(10)
总是给我以下错误
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/selenium/webdriver/remote/webdriver.py", line 727, in set_page_load_timeout
'pageLoad': int(float(time_to_wait) * 1000)})
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/selenium/webdriver/remote/webdriver.py", line 238, in execute
self.error_handler.check_response(response)
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/selenium/webdriver/remote/errorhandler.py", line 193, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message:
消息:之后什么都没有。我无法确定错误的类型。很奇怪,我的笔记本电脑不能 运行
driver.set_page_load_timeout(10)
我的下一步是单击页面上的一个按钮,但即使在完全加载后该按钮也不总是存在。因此我不能使用显式等待。
谢谢
(在您的代码片段中您没有定义 URL,但我假设 URL 是在您的实际代码中的某处定义的。)
您可以为此组合 retry and timeout-decorator 个软件包:
from retry import retry
from timeout_decorator import timeout, TimeoutError
from selenium import webdriver
from selenium.common.exceptions import TimeoutException
@retry(TimeoutError, tries=3)
@timeout(10)
def get_with_retry(driver, url):
driver.get(url)
def main():
url = "http://something.foo"
driver=webdriver.Firefox()
try:
get_with_retry(driver, url)
foo(driver) # do whatever it is you need to do
finally:
driver.quit()
if __name__ == "__main__":
main()
请注意,您需要不将 driver.set_page_load_timeout
设置为任何值,或者将其设置为高于 10 秒的值。
from selenium import webdriver
driver=webdriver.Firefox()
driver.get(url)
有时 webdriver 卡在文件或响应上,页面永远不会完全加载,所以行
driver.get(url)
从未完成。但是我已经获得了足够的源代码来 运行 我的其余代码。我想知道如果页面在 10 秒内未完全加载,我该如何绕过或刷新页面。
我试过了
from selenium import webdriver
from selenium.common.exceptions import TimeoutException
driver=webdriver.Firefox()
driver.set_page_load_timeout(10)
while True:
try:
driver.get(url)
except TimeoutException:
print("Timeout, retrying...")
continue
else:
break
但是行
driver.set_page_load_timeout(10)
总是给我以下错误
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/selenium/webdriver/remote/webdriver.py", line 727, in set_page_load_timeout
'pageLoad': int(float(time_to_wait) * 1000)})
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/selenium/webdriver/remote/webdriver.py", line 238, in execute
self.error_handler.check_response(response)
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/selenium/webdriver/remote/errorhandler.py", line 193, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message:
消息:之后什么都没有。我无法确定错误的类型。很奇怪,我的笔记本电脑不能 运行
driver.set_page_load_timeout(10)
我的下一步是单击页面上的一个按钮,但即使在完全加载后该按钮也不总是存在。因此我不能使用显式等待。
谢谢
(在您的代码片段中您没有定义 URL,但我假设 URL 是在您的实际代码中的某处定义的。)
您可以为此组合 retry and timeout-decorator 个软件包:
from retry import retry
from timeout_decorator import timeout, TimeoutError
from selenium import webdriver
from selenium.common.exceptions import TimeoutException
@retry(TimeoutError, tries=3)
@timeout(10)
def get_with_retry(driver, url):
driver.get(url)
def main():
url = "http://something.foo"
driver=webdriver.Firefox()
try:
get_with_retry(driver, url)
foo(driver) # do whatever it is you need to do
finally:
driver.quit()
if __name__ == "__main__":
main()
请注意,您需要不将 driver.set_page_load_timeout
设置为任何值,或者将其设置为高于 10 秒的值。