我有一段代码使用 Selenium 循环浏览页面中的链接。我已Time.sleep(3)
用 a替换WebDriverWait()
以尝试加快速度(因为我正在运行 50 页),但我无法让它工作。出于某种原因implicitly_wait(30)
,它没有起到作用。
没有任何Time.sleep()
或WebDriverWait()
代码在尝试声明变量“elems”时会生成过时的元素引用错误,因为驱动程序无法通过 xpath 找到任何元素 - 这并不奇怪。
我在这里使用的 WebDriverWait() 解决了这个问题,但随后代码又遇到了另一个问题:在嵌套 for 循环的最后一行,它引发了另一个过时的元素引用错误。似乎虽然在 WebDriverWait() 让代码继续执行时加载了元素,但这些元素的属性不一定准备好。
我的目标是使代码尽可能快,所以 Time.sleep(10) 或类似的东西不会很吸引人。在继续之前,如何顺利确保所有元素及其属性都已加载?为什么implicitly_wait(30) 不能解决这个问题?
编辑:有问题的网址:从 http://www.oddsportal.com/baseball/usa/mlb-2017/results/#/page/1/到http://www.oddsportal.com/baseball/usa/mlb -2017/结果/#/页/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")