2017-03-18 44 views
1

即時通訊設法打印標題,爲編程點擊鏈接。我有一些麻煩。不過,我得到的不是錯誤,而是別的。是的,我已經試過"text"但實際上給我一個錯誤硒不打印文本

Main.py

from selenium import webdriver 
from selenium.webdriver.common.keys import Keys 
from selenium.webdriver.support.ui import WebDriverWait 
import unittest 

class Test(): 
    def setUp(self): 
     self.driver = webdriver.Chrome() 
     self.driver.get("https://orlando.craigslist.org/search/apa?s=100") 

    def task(self): 
     driver = self.driver 
     ln = driver.find_elements_by_xpath('//*[@id="sortable-results"]/ul/li/p/a') 
     size = len(driver.find_elements_by_xpath('//*[@id="sortable-results"]/ul/li/p/a')) 

     for i in range(0, size): 
      ln = driver.find_elements_by_xpath('//*[@id="sortable-results"]/ul/li/p/a') 
      ln = ln[i] 
      ln.click() 
      print (ln) 

      back = driver.find_element_by_xpath('/html/body/section/header/nav/ul/li[3]/p/a').click() 
      WebDriverWait(driver,3) 
      if i == 5: 
       break 

    def getInfo(self,ln): 
     driver = self.driver 
     if ln: 
      print (ln) 
     else: 
      print ("No listing name") 


    def initialize(): 
     return Test 

    def teardown(self): 
     self.driver.quit() 



run = Test() 
run.setUp() 
tas = run.task() 
run.teardown() 
WebDriverWait(tas,3) 





if __name__ == '__main__': 
    unittest.main() 

這裏是我得到

<selenium.webdriver.remote.webelement.WebElement (session="214c8aa4e4a919e11149b48fc1971ebf", element="0.47651721823993864-1")> 
<selenium.webdriver.remote.webelement.WebElement (session="214c8aa4e4a919e11149b48fc1971ebf", element="0.8722193647053464-2")> 
<selenium.webdriver.remote.webelement.WebElement (session="214c8aa4e4a919e11149b48fc1971ebf", element="0.7501031429429339-3")> 
<selenium.webdriver.remote.webelement.WebElement (session="214c8aa4e4a919e11149b48fc1971ebf", element="0.1697348713718274-4")> 
<selenium.webdriver.remote.webelement.WebElement (session="214c8aa4e4a919e11149b48fc1971ebf", element="0.8560861666106063-5")> 
<selenium.webdriver.remote.webelement.WebElement (session="214c8aa4e4a919e11149b48fc1971ebf", element="0.8604981647081367-6")> 

這裏是打印(ln.text)得到我

Traceback (most recent call last): 
    File "main.py", line 45, in <module> 
    tas = run.task() 
    File "main.py", line 20, in task 
    print (ln.text) 
    File "/Library/Python/2.7/site-packages/selenium/webdriver/remote/webelement.py", line 73, in text 
    return self._execute(Command.GET_ELEMENT_TEXT)['value'] 
    File "/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", line 238, in execute 
    self.error_handler.check_response(response) 
    File "/Library/Python/2.7/site-packages/selenium/webdriver/remote/errorhandler.py", line 193, in check_response 
    raise exception_class(message, screen, stacktrace) 
selenium.common.exceptions.StaleElementReferenceException: Message: stale element reference: element is not attached to the page document 
    (Session info: chrome=56.0.2924.87) 
    (Driver info: chromedriver=2.27.440174 (e97a722caafc2d3a8b807ee115bfb307f7d2cfd9),platform=Mac OS X 10.11.2 x86_64) 

回答

3

你看到的是WebElement實例表示字符串。相反,你需要通過獲取.text屬性的值來獲得一個元素的文本:

print(ln.text) 

還要注意的是WebDriverWait(driver, 3)線將真正做到「無」(當然,除了拍的WebDriverWait一個實例,這將是很快垃圾收集),如果你想要一個硬編碼的時間延遲,使用time.sleep(3),但一個更好的主意是明確地等待通過WebDriverWait and .until()滿足某個條件。

+0

我做了一個編輯,我試了你推薦的我得到的錯誤 – BARNOWL

+0

@OwlMan這是因爲當你第一次點擊這個元素時,另一個頁面已經被加載了。當您詢問文字時,該元素已經不在網頁上。首先,獲取文本,然後單擊。 – alecxe

+0

我該怎麼做alecxe? – BARNOWL