我有一段代码,使用Selenium循环遍历页面中的链接。
我已将Time.sleep(3)
替换为WebDriverWait()
以尝试加快速度(因为我已经浏览了50页),但我无法让它发挥作用。由于某种原因implicitly_wait(30)
没有做到这一点。
没有任何Time.sleep()
或WebDriverWait()
代码在尝试声明变量" elems"时会生成陈旧的元素引用错误,因为驱动程序无法找到任何元素通过xpath - 不足为奇。
我在这里使用的WebDriverWait()解决了这个问题,但随后代码运行到另一个:在嵌套for循环的最后一行,它抛出了另一个陈旧的元素引用错误。似乎虽然在WebDriverWait()允许代码继续时加载了元素,但这些元素的属性并不一定就绪。
我的目标是尽可能快地编写代码,因此Time.sleep(10)或类似的东西不会非常吸引人。如何在继续之前顺利确保所有元素及其属性都已加载?为什么hiddenly_wait(30)不能解决这个问题呢?
编辑:相关网址:从http://www.oddsportal.com/baseball/usa/mlb-2017/results/#/page/1/到http://www.oddsportal.com/baseball/usa/mlb-2017/results/#/page/50/
PageRange = range(1, 50)
for page in PageRange:
URL = "http://www.oddsportal.com/baseball/usa/mlb-" + season + "/results/#/page/" + str(page) + "/"
driver.get(URL)
tryElement = EC.presence_of_element_located((By.XPATH, "//a[@href]"))
WebDriverWait(driver, 30).until(tryElement)
elems = driver.find_elements_by_xpath("//a[@href]")
for elem in elems:
#This line I can't get not to throw a stale element reference
link = elem.get_attribute("href")
答案 0 :(得分:0)
根据您提供的参考代码块,您可以使用以下代码块来避免StaleElementReferenceException
:
PageRange = range(1, 50)
for page in PageRange:
URL = "http://www.oddsportal.com/baseball/usa/mlb-" + season + "/results/#/page/" + str(page) + "/"
driver.get(URL)
elems = WebDriverWait(driver, 30).until(EC.visibility_of_all_elements_located((By.XPATH, "//a[@href]")))
for elem in elems:
print(elem.get_attribute("href"))