2017-03-23 201 views
0

一個接一個我使腳本搜索我intersted字符串集,但我有錯誤。 我如何解決以下問題:點擊鏈接與硒的webdriver Python

links = driver.find_elements_by_xpath("xpath") 

for x in range(0, len(links)): 
    driver.implicitly_wait(2) 
    links[x].click() 
    try: 
     driver.implicitly_wait(3) 
     DO something 
     driver.back() 
     print("Mission completed!!") 
    except (ElementNotVisibleException, NoSuchElementException): 
     driver.back() 
     print("No action") 

Error: 
selenium.common.exceptions.StaleElementReferenceException: Message: The element reference is stale. Either the element is no longer attached to the DOM or the page has been refreshed. 
in line: links[x].click() 

回答

1

一旦您重定向到您的列表中的新頁面元素links就會過時 - 您不能再使用它們了。

您可以使用下面的代碼來代替:

links = [link.get_attribute('href') for link in driver.find_elements_by_xpath("xpath")] 
for link in links: 
    driver.get(link) 
    # DO something 

這應該讓你得到引用的列表和循環

+0

THX人從每一頁!你教了我很多很好的代碼:)這是做這件事的最佳範例嗎?用20個鏈接搜索後,我的網站看起來像谷歌一樣。 – PythonLearn

+0

如果只有一個包含20個鏈接的頁面,您可以按原樣使用它,但是如果您有分頁(每個頁面包含20個鏈接),則可以執行另一個循環,單擊「Next」按鈕在每個頁面附加鏈接然後通過提供的循環。一個循環 - 收集鏈接,一個 - 遵循引用列表中的鏈接 – Andersson

1

什麼是點擊鏈接?如果點擊後導航到另一個頁面,則迭代中的下一個頁面不再位於DOM中,實際上變爲陳舊