2016-08-02 28 views
0

Ich erstelle ein Skript in Python, das eine Tabelle mit drei Spalten durchläuft. Ich habe eine Liste erstellt, in der jeder Link in der ersten Spalte in die Liste eingefügt wird. Und dann gehe ich durch. Beim Loopen klicke ich in den Link, drucke eine Anweisung aus, um sicherzustellen, dass sie tatsächlich in den Link geklickt hat, und gehe dann zur vorherigen Seite, um auf den nächsten Link zu klicken. Der Fehler, den ich bekomme, ist, dass meine Schleife zuerst die ersten zwei Links durchläuft und dann bekomme ich eine StaleElementReferenceException, wenn die Schleife die Links [page] .click() zum dritten Mal aufruft. Ich kann den HTML-Code nicht veröffentlichen, da die Site vertraulich ist.Web Crawlen einer Tabelle von Links

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()  

Antwort

1

Ich bin nicht sicher, ob Sie bereits die offizielle Selenium Dokumentation sah:

Eine veraltete Element Referenz Ausnahme in einem von zwei Fällen geworfen wird, die zunächst mehr gemeinsam ist als die zweite: Das Element wurde vollständig gelöscht. Das Element ist nicht mehr an das DOM gebunden.

In Ihrem Fall denke ich, dass Sie die zweite Ausgabe haben. Jedes Mal, wenn Sie klicken und in die Schleife zurückkehren, ändert sich Ihr DOM. Bitte überprüfe das.