Сообщение: устаревшая ссылка на элемент: элемент не прикреплен к документу страницы в Python - PullRequest
0 голосов
/ 29 августа 2018

Я пытался запустить следующий код в трех разных веб-ссылках. Код отлично работает на одной веб-ссылке. Однако он выдает сообщение об ошибке «Ссылка: устаревшая ссылка на элемент: элемент не прикреплен к документу страницы». Я посмотрел в двух предыдущих темах форума ( Исправление устаревших элементов Python Selenium и Как перейти на новую веб-страницу в 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).

Любые советы по устранению проблемы.

1 Ответ

0 голосов
/ 29 августа 2018

Чтобы получить сведения о вкладах, избегая устаревших ссылок на элементы , вы можете использовать следующее решение:

  • Кодовый блок:

    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
    
  • Здесь вы можете найти подробное обсуждение Исключение StaleElementReference в PageFactory

...