我一直试图在三个不同的Web链接中运行以下代码。代码可以在一个Web链接上正常工作。但是,它将引发有关“消息:陈旧元素引用:元素未附加到页面文档”的错误消息。我查看了论坛的前两个线程(Python Selenium stale element fix和How to Navigate to a New Webpage In Selenium?),发现了相同的错误消息,但是并没有解决问题。 这是我的代码:
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)
程序适用于此链接(https://github.com/alex),不适用于(https://github.com/agronholm,https://github.com/avassalotti)。
任何解决此问题的建议。
答案 0 :(得分:1)
要检索有助于避免 陈旧元素引用 的贡献的详细信息,可以使用以下解决方案:
代码块:
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"))
控制台输出:
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