我正在执行一个脚本,该脚本单击多个页面以检索数据。每次点击后,新页面显然必须加载,加载时间差异很大(大多是2-3秒,有时>20秒(。因此,我需要使代码灵活地等待执行,直到加载元素。我已经实现了下面的解决方案,但我仍然收到一个陈旧的元素引用错误,我不明白(因为代码不应该在加载完成之前退出 while 循环(。谁能解释为什么会发生这种情况/我能做些什么来解决?
提前抱歉,我无法与您共享可执行脚本。
error = 1
if page_ref < Max_pagenum_1:
while error == 1:
try:
link = browser.find_element_by_xpath('//li[contains(@class,"page-item") and contains(@class,"active")]/following-sibling::li/a').click()
error = 0
time.sleep(3)
except:
error = 1
time.sleep(20)
else:
print('finished' + Name)
您可以使用等待语句。大致如下:
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
error = 1
if page_ref < Max_pagenum_1:
while error == 1:
try:
WebDriverWait(browser, 20).until(
EC.presence_of_element_located((By.XPATH, '//li[contains(@class,"page-item") and contains(@class,"active")]/following-sibling::li/a')))
link = browser.find_element_by_xpath('//li[contains(@class,"page-item") and contains(@class,"active")]/following-sibling::li/a').click()
error = 0
time.sleep(3)
except:
error = 1
time.sleep(20)
else:
print('finished' + Name)