首页 > 解决方案 > 等待后没有得到解决的陈旧元素,python

问题描述

我正在尝试使用“课程”课程进入此页面上的每个链接

<a name="hrvatski-jezik" href="/pregled/predmet/29812177240/1971997880"><div class="course">
    Hrvatski jezik   <br>
        <span class="course-info">Tamara Čer</span>
    </div>
</a>
<a name="likovna-kultura" href="/pregled/predmet/29812176230/1971998890">
    <div class="course">Likovna kultura   <br>
        <span class="course-info">Mia  Marušić</span>
    </div>
</a>
<a name="glazbena-kultura" href="/pregled/predmet/29812175220/1971999900">
    <div class="course">Glazbena kultura   <br>
        <span class="course-info">Danijel Služek</span>
    </div>
</a>
<a name="engleski-jezik" href="/pregled/predmet/29820696590/1972511970">
    <div class="course">Engleski jezik   <br>
        <span class="course-info">Nevena Genčić</span>
    </div>
</a>    
<a name="matematika" href="/pregled/predmet/29812174210/1972000910">
    <div class="course">Matematika   <br>
        <span class="course-info">Ivan Tomljanović</span>
    </div></a>
<a name="biologija" href="/pregled/predmet/29812173200/1972001920">
    <div class="course">Biologija   <br>
        <span class="course-info">Antonija Milić</span>
    </div>
</a>
<a name="kemija" href="/pregled/predmet/29812172190/1972002930">
    <div class="course">Kemija   <br>
        <span class="course-info">Antonija Milić</span>
    </div>
</a>
<a name="fizika" href="/pregled/predmet/29812171180/1972003940">
    <div class="course">Fizika   <br>
        <span class="course-info">Ivan Kunac</span>
    </div>
</a>
<a name="povijest" href="/pregled/predmet/29812170170/1972004950">
    <div class="course">Povijest   <br>
        <span class="course-info">Lovorka Krajnović Tot</span>
    </div>
</a>
<a name="geografija" href="/pregled/predmet/29812169160/1972005960">
    <div class="course">Geografija   <br>
        <span class="course-info">Sunčica Podolski <strong> (na zamjeni)</strong>, Oliver Timarac</span>
    </div>
</a>
<a name="tehnicka-kultura" href="/pregled/predmet/29812168150/1972006970">
    <div class="course">Tehnička kultura   <br>
        <span class="course-info">Ivan Dorotek</span>
    </div>
</a>
<a name="tjelesna-i-zdravstvena-kultura" href="/pregled/predmet/29812167140/1972007980">
    <div class="course">Tjelesna i zdravstvena kultura   <br>
        <span class="course-info">Davor  Marković, Tomislav Ruskaj</span>
    </div>
</a>
<a name="informatika" href="/pregled/predmet/29821462170/1972568530">
    <div class="course">Informatika (izborni)  <br>
        <span class="course-info">Blaženka Knežević</span>
    </div>
</a>
<a name="njemacki-jezik" href="/pregled/predmet/32658461270/1972646300"><div class="course">Njemački jezik (izborni)  <br>
    <span class="course-info">Zdravka Marković Boto</span>
</div>
</a>
<a name="rusinski-jezik-i-kultura" href="/pregled/predmet/32658491570/1972675590">
    <div class="course">Rusinski jezik i kultura (izborni)  <br>
        <span class="course-info">Natalija Hnatko, Ilona Hrecešin</span>
    </div>
</a>
<a name="sat-razrednika" href="/pregled/predmet/32322897860/2140793120">
    <div class="course">Sat razrednika   <br>
        <span class="course-info">Blaženka Knežević</span>
    </div>
</a>
<a name="izvannastavne-aktivnosti" href="/pregled/predmet/34285616720/2324344460">
    <div class="course">Izvannastavne aktivnosti (izvannastavna aktivnost)  <br>
        <span class="course-info">Nevena Genčić, Ivan Kunac, Davor  Marković, Josip Matezović, Antonija Milić, Tomislav Ruskaj, Danijel Služek</span>
    </div>
</a>

` 我希望代码进入每个链接,然后返回并重复。它进入 try 块一次,然后进入 except 块 16 次。

对于每一个除了它给StaleElementReferenceException: Message: stale element reference: element is not attached to the page document

我的代码:

def get_subject():

    subjects = driver.find_elements_by_xpath("//div[@class='course']")

    for subject in subjects: 
        actions = ActionChains(driver)
        actions.move_to_element(subject)    

        try:
            actions.click()
            actions.perform()

            driver.back()
            print("try")

            time.sleep(3)

        except Exception as e:
            subjects = driver.find_elements_by_xpath("//div[@class='course']")
            print("except")
            print(e)

我知道这是一个非常普遍的问题。我尝试了隐式和显式等待,我仍然得到同样的错误。我试过了visibility_of_element_located,,,,我再次尝试定义“主题”。presence_of_element_locatedstaleness_of

非常感谢您的帮助,我一直在寻找解决方案一段时间。

标签: pythonseleniumselenium-webdriver

解决方案


我建议all links先捕获然后迭代。

alllinks=[link.get_attribute('href') for link in driver.find_elements_by_css_selector("a[href^='/pregled/predmet']")]
for link in alllinks:
    driver.get(link)
    #Perform your operation

如果您想继续使用您的代码,只需再次重新分配元素即可。因为您使用的是 driver.back(),所以您的页面正在刷新。

def get_subject():

    subjects = driver.find_elements_by_xpath("//div[@class='course']")

    for subject in range(len(subjects)):
        subjects = driver.find_elements_by_xpath("//div[@class='course']")
        actions = ActionChains(driver)
        actions.move_to_element(subjects[subject])    

        try:
            actions.click()
            actions.perform()

            driver.back()
            print("try")

            time.sleep(3)

        except Exception as e:
            subjects = driver.find_elements_by_xpath("//div[@class='course']")
            print("except")
            print(e)

推荐阅读