2017-03-11 142 views
3

所以我開始得到while循環的竅門,但是當在硒代碼上使用while循環時,我提到了簡短。硒雖然循環不工作

差不多我試圖複製一個任務10次,這裏是代碼的樣子

Main.py

from selenium import webdriver 
from selenium.webdriver.common.keys import Keys 


driver = webdriver.Chrome() 
driver.get('https://orlando.craigslist.org/search/cta') 

owl = driver.find_element_by_xpath('//*[@id="sortable-results"]/ul/li/p/a') 
res = 1 

while res < 10: 
    owl2 = owl.click() 
    driver.find_element_by_xpath('/html/body/section/header/nav/ul/li[3]/p/a').click() 

    res = res + 1 

以下是錯誤

回溯(最近一次通話最後): 文件「main.py」,第12行,在 中owl2 = owl.click() 文件「/Library/Python/2.7/site-packages/selenium/webdriver/remote/webelement.py」, 第77行,點擊 self._execute(Command.CLICK_ELEMENT) 文件「/Library/Python/2.7/site- packages/selenium/webdriver/remote/webelement.py「, line 491,in _execute return self._parent.execute(command,params) File」/Library/Python/2.7/site-packages/selenium/webdriver/remote /webdriver.py」, 線238,在執行 self.error_handler.check_response(響應) 文件 「/Library/Python/2.7/site-packages/selenium/webdriver/remote/errorhandler.py」, 線193, in check_response raise exception_class(message,screen,stacktrace) selenium.co mmon.exceptions.StaleElementReferenceException:消息:陳舊元件參考:元件未連接到頁面 文件 (會話信息:鉻= 56.0.2924.87) (驅動程序信息:chromedriver = 2.27.440174(e97a722caafc2d3a8b807ee115bfb307f7d2cfd9),平臺=的Mac OS X 10.11.2 x86_64)

有什麼建議嗎?

回答

4

每次DOM更改或刷新driver損失時,它先前所在的元素都會導致錯誤。

StaleElementReferenceException:消息:過時的元素參考: 元素沒有連接到網頁文件

您需要重新安置他們,以便與他們進行互動。此外,這樣你就可以將其分配給任何

res = 1 
while res < 10: 
    owl = driver.find_element_by_xpath('//*[@id="sortable-results"]/ul/li/p/a') 
    owl.click() 
    driver.find_element_by_xpath('/html/body/section/header/nav/ul/li[3]/p/a').click() 
    res = res + 1 

編輯

隨着for迴路中的所有項目,你可以找到的物品放入一個列表click()不返回任何值並通過指數

size = len(driver.find_elements_by_xpath('//*[@id="sortable-results"]/ul/li/p/a')) 
for i in range(0, size): 
    owl = driver.find_elements_by_xpath('//*[@id="sortable-results"]/ul/li/p/a') 
    owl[i].click() 
    driver.find_element_by_xpath('/html/body/section/header/nav/ul/li[3]/p/a').click() 
+0

的偉大工程,現在你不必回答這個問題,但是,竟被如何d你在「For循環」中執行此操作。每個清單 – BARNOWL

+0

@OwlMan我增加了一個'for'循環的示例 – Guy

+0

@OwlMan編輯包含所有項目。 – Guy

2

錯誤信息給了我們一個線索:

Message: stale element reference: element is not attached to the page document 

這裏發生的事情是,你點擊一個鏈接,並導航到另一個頁面,因此,你會過時的元素,因爲你是在一個不同的頁。 您將要導航回到同一頁,嘗試這樣的事情:

driver.execute_script("window.history.go(-1)") 

點擊()事件之後。

+0

靜止點擊不復制任務10次,雖然這 – BARNOWL