簡體   English   中英

StaleElementReferenceException Selenium WebDriver Python

[英]StaleElementReferenceException selenium webdriver python

我正在使用Selenium,Python和PhantomJS編寫爬蟲程序,以使用Google的反向圖像搜索。 到目前為止,我已經能夠成功上傳圖像並在第一頁上爬網搜索結果。 但是,當我嘗試單擊搜索結果導航時,出現了StaleElementReferenceError。 我在很多帖子中都讀過它,但是仍然無法實現該解決方案。 這是中斷的代碼:

ele7 = browser.find_element_by_id("nav")
ele5 = ele7.find_elements_by_class_name("fl")

count = 0
for elem in ele5:
    if count <= 2:
        print str(elem.get_attribute("href"))
        elem.click()
        browser.implicitly_wait(20)
        ele6 = browser.find_elements_by_class_name("rc")
        for result in ele6:
            f = result.find_elements_by_class_name("r")
            for line in f:
                link = line.find_elements_by_tag_name("a")[0].get_attribute("href")
                links.append(link)
                parsed_uri = urlparse(link)
                domains.append('{uri.scheme}://{uri.netloc}/'.format(uri=parsed_uri))
            count += 1 

該代碼在print str(elem.get_attribute("href"))處中斷。 我該如何解決?

提前致謝。

單擊一個鏈接將使瀏覽器轉到另一個頁面。 使對舊頁面中的元素( ele5elem )的引用無效。

修改代碼以不引用無效元素。

例如,您可以在訪問其他頁面之前獲取URL:

ele7 = browser.find_element_by_id("nav")
ele5 = ele7.find_elements_by_class_name("fl")

urls = [elem.get_attribute('href') for elem in ele5]  # <-----

browser.implicitly_wait(20)

for url in urls[:2]:  # <------
    print url
    browser.get(url)  # <------ used `browser.get` instead of `click`.
                      #         ; using `element.click` will cause the error.

    ele6 = browser.find_elements_by_class_name("rc")
    for result in ele6:
        f = result.find_elements_by_class_name("r")
        for line in f:
            link = line.find_elements_by_tag_name("a")[0].get_attribute("href")
            links.append(link)
            parsed_uri = urlparse(link)
            domains.append('{uri.scheme}://{uri.netloc}/'.format(uri=parsed_uri))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM