0

我有一段代码使用 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") 
4

1 回答 1

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"))
于 2018-02-12T13:38:59.407 回答