2016-08-02 2 views
0

Я создаю скрипт в python, который проходит через таблицу с тремя столбцами. Я создал список, в котором каждая ссылка в первом столбце вставлена ​​в список. И затем я прохожу. Когда вы зацикливаете, я нажимаю на ссылку, печатаю заявление, чтобы убедиться, что оно действительно нажало на ссылку, а затем перейдите на предыдущую страницу, чтобы можно было щелкнуть следующую ссылку. Ошибка, которую я получаю, заключается в том, что мой цикл сначала проходит по первым двум ссылкам, а затем я получаю исключение StaleElementReferenceException, когда цикл вызывает ссылки [page] .click() в третий раз. Я не могу опубликовать html, потому что сайт является конфиденциальным.веб-сканирование таблицы ссылок

from selenium import webdriver 
    from selenium.webdriver.common.keys import Keys 
    from selenium.webdriver.common.by import By 
    from selenium.webdriver.support.ui import Select 
    import traceback 


    # starting chrome browser 
    chrome_path = r"C:\Users\guaddavi\Downloads\chromedriver_win32 extract\chromedriver.exe" 
    browser = webdriver.Chrome(chrome_path) 


    #linking to page 
    browser.get('link to page with table ') 


    #find table of ETL Extracts 
    table_id = browser.find_element_by_id('sortable_table_id_0') 
    #print('found table') 

    #get all the rows of the table containing the links 
    rows = table_id.find_elements_by_tag_name('tr') 

    #remove the first row that has the header 
    del rows[0] 
    current = 0 
    links = [] * len(rows) 

    for row in rows: 
    col = row.find_elements_by_tag_name('td')[0] 
    links.append(col) 
    current +=1 

    page = 0 
    while(page <= len(rows)): 
     links[page].click() 
     print('clicked link' + " " + str(page)) 
     page += 1 
     browser.back()  

ответ

1

Я не уверен, что вы уже видели официальный Selenium документацию:

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

В вашем случае я думаю, что у вас вторая проблема. Каждый раз, когда вы нажимаете и возвращаетесь в цикл, ваш DOM меняется. Пожалуйста, проверьте это.