问题
I have been trying to run the following code in three different weblinks. Code works fine on one weblink. However, it throws an error message about "Message: stale element reference: element is not attached to the page document". I looked into forum's two previous threads (Python Selenium stale element fix and How to Navigate to a New Webpage In Selenium?) about the same error message but didn't get sort it out the issue. Here is my code:
driver.get('https://github.com/avassalotti')
contributions = driver.find_elements_by_xpath(".//ul[@class='filter-list small']//li")
print(contributions)
for item in contributions:
print (item)
print(item.text)
item.click()
time.sleep(3)
contribution = driver.find_element_by_xpath(".//*[@class='f4 text-normal mb-2']").text
print(contribution)
Program works for this link (https://github.com/alex) and does not work for (https://github.com/agronholm, https://github.com/avassalotti).
Any advice to fix the issue.
回答1:
To retrieve the details of contributions avoiding stale element reference you can use the following solution:
Code Block:
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC years = [] options = webdriver.ChromeOptions() options.add_argument("start-maximized") options.add_argument('disable-infobars') driver=webdriver.Chrome(chrome_options=options, executable_path=r'C:\Utility\BrowserDrivers\chromedriver.exe') driver.get("https://github.com/agronholm") contributions = WebDriverWait(driver, 5).until(EC.visibility_of_all_elements_located((By.XPATH, "//div[@class='profile-timeline-year-list js-profile-timeline-year-list bg-white js-sticky float-right col-2 pl-5']/ul[@class='filter-list small']//li/a"))) for item in contributions: print(item.get_attribute("innerHTML")) years.append(item.get_attribute("href")) for year in years: driver.get(year) print(WebDriverWait(driver, 5).until(EC.visibility_of_element_located((By.XPATH, "//div[@class='js-yearly-contributions']//h2[@class='f4 text-normal mb-2']"))).get_attribute("innerHTML"))
Console Output:
2018 2017 2016 2015 2014 2013 2012 2011 2010 2009 260 contributions in the last year 637 contributions in 2017 770 contributions in 2016 298 contributions in 2015 239 contributions in 2014 101 contributions in 2013 113 contributions in 2012 90 contributions in 2011 16 contributions in 2010 2 contributions in 2009
Here you can find a detailed discussion on StaleElementReference Exception in PageFactory
来源:https://stackoverflow.com/questions/52073181/message-stale-element-reference-element-is-not-attached-to-the-page-document-i