Selenium 可以检测网页何时在 Python3 中完成加载吗?
Can Selenium detect when webpage finishes loading in Python3?
我在python中写道:
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=chrome_options)
driver.get(url)
try:
WebDriverWait(driver, 10).until(
lambda driver: driver.execute_script('return document.readyState') == 'complete')
except se.TimeoutException:
return False
# Start Parsing
尽管我已经为某些网站等待 readyState
,但当我解析它时,我发现没有复选框。但是,如果我在解析同一个网站之前添加 time.sleep(5)
,我会发现有一个复选框。
我的问题是,我怎样才能拥有适用于大多数网站的通用解决方案?我不能只写 time.sleep(5)
,因为有些网站可能需要更多,有些可能会在 0.001 秒内完成(这会对性能产生不良影响...)
我只是想刺激一个真正的浏览器,而不是在刷新按钮再次出现之前不处理任何事情(这意味着一切都已加载)。
理想情况下,Web 应用程序在通过 get()
访问时,returns 只有在 document.readyState
equals to complete
时才将控件交给 WebDriver。因此,除非 AUT(正在测试的应用程序)表现不佳,否则以下代码行通常是开销:
WebDriverWait(driver, 10).until(lambda driver: driver.execute_script('return document.readyState') == 'complete')
但是,根据您的测试要求,您可以将 配置为:
none
eager
normal
You can find a detailed discussion in What is the correct syntax checking the .readyState of a website in Selenium Python
此时需要注意的是,在没有任何特定条件的情况下使用time.sleep(secs)
来实现达不到Automation[=54的目的=],应该不惜一切代价避免。
解决方案
适用于所有网站的通用方法是根据普遍的测试场景引入 WebDriverWait。例如:
- 要等待元素的存在,您需要调用
presence_of_element_located()
的 expected_conditions
- 要等待元素的可见性,您需要调用
visibility_of_element_located()
的 expected_conditions
- 要等待元素可见、启用和可交互以便您可以单击它,您需要调用
element_to_be_clickable()
[的 expected_conditions
我在python中写道:
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=chrome_options)
driver.get(url)
try:
WebDriverWait(driver, 10).until(
lambda driver: driver.execute_script('return document.readyState') == 'complete')
except se.TimeoutException:
return False
# Start Parsing
尽管我已经为某些网站等待 readyState
,但当我解析它时,我发现没有复选框。但是,如果我在解析同一个网站之前添加 time.sleep(5)
,我会发现有一个复选框。
我的问题是,我怎样才能拥有适用于大多数网站的通用解决方案?我不能只写 time.sleep(5)
,因为有些网站可能需要更多,有些可能会在 0.001 秒内完成(这会对性能产生不良影响...)
我只是想刺激一个真正的浏览器,而不是在刷新按钮再次出现之前不处理任何事情(这意味着一切都已加载)。
理想情况下,Web 应用程序在通过 get()
访问时,returns 只有在 document.readyState
equals to complete
时才将控件交给 WebDriver。因此,除非 AUT(正在测试的应用程序)表现不佳,否则以下代码行通常是开销:
WebDriverWait(driver, 10).until(lambda driver: driver.execute_script('return document.readyState') == 'complete')
但是,根据您的测试要求,您可以将
none
eager
normal
You can find a detailed discussion in What is the correct syntax checking the .readyState of a website in Selenium Python
此时需要注意的是,在没有任何特定条件的情况下使用time.sleep(secs)
来实现达不到Automation[=54的目的=],应该不惜一切代价避免。
解决方案
适用于所有网站的通用方法是根据普遍的测试场景引入 WebDriverWait。例如:
- 要等待元素的存在,您需要调用
presence_of_element_located()
的 expected_conditions
- 要等待元素的可见性,您需要调用
visibility_of_element_located()
的 expected_conditions
- 要等待元素可见、启用和可交互以便您可以单击它,您需要调用
element_to_be_clickable()
[的 expected_conditions