2017-03-19 7 views
0

Excelスプレッドシートをエクスポートしようとしていて、何をしようとしているのですか?spreadsheet 。助言がありますか ? 私はこれと同様のquestionタイプエラー:サポートされていないオペランドタイプ: 'WebElement'および 'WebElement'(セレン用)

Main.py

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





class Test(): 
    # filename = "list.csv" 
    # f = open(filename,"w") 
    # headers = "listing name, aval \n" 

    # f.write(headers) 

    def setUp(self): 
     self.driver = webdriver.Chrome() 
     self.driver.get("https://orlando.craigslist.org/search/apa?s=100") 
     self.filename = "list.csv" 
     self.f = open(self.filename,"w") 
     self.headers = "listing name, aval \n" 

    def task(self): 
     driver = self.driver 
     filename = self.filename 
     f = self.f 
     headers = self.headers 
     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] 
      self.getLn(ln) 
      ln.click() 
      av = driver.find_element_by_xpath('/html/body/section/section/section/div[1]/p[1]/span[3]') 
      self.getAv(av) 
      back = driver.find_element_by_xpath('/html/body/section/header/nav/ul/li[3]/p/a').click() 
      WebDriverWait(driver,3) 
      f.write(ln + av + "\n") 
      if i == 5: 
       f.close() 
       break 





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



    def getAv(self,av): 
     driver = self.driver 
     if av: 
      print (av.text) 
     else: 
      print ("No listing name") 


    def initialize(): 
     return Test 

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



run = Test() 
run.setUp() 
tas = run.task() 
run.teardown() 






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

トレースバックエラーのように、ここでのリソースの数を参照しています

File "main.py", line 41, in task 
    f.write(ln + av + "\n") 
TypeError: unsupported operand type(s) for +: 'WebElement' and 'WebElement' 

EDIT、エラー

Traceback (most recent call last): 
    File "main.py", line 77, in <module> 
    tas = run.task() 
    File "main.py", line 41, in task 
    f.write(ln.text + av.text + "\n") 
    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) 

答えて

1

lnavはWebElementsであり、あなたがそれらを追加することができませんので、あなたがそのエラーを取得しています。

def task(self): 
     driver = self.driver 
     filename = self.filename 
     f = self.f 
     headers = self.headers 
     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] 
      self.getLn(ln) 
      ln.click() 
      av = driver.find_element_by_xpath('/html/body/section/section/section/div[1]/p[1]/span[3]') 
      self.getAv(av) 
      back = driver.find_element_by_xpath('/html/body/section/header/nav/ul/li[3]/p/a').click() 
      WebDriverWait(driver,3) 
      f.write(ln + av + "\n") ### Adding WebElement's isn't allowed 
       f.close() 
       break 

あなたの意図は、ページの要素のテキストを連結(結合)することです。その場合、f.write(ln + av + "\n")f.write(ln.text + av.text + "\n")に変更してください。

これがあなたの質問に答えることを願っています。ハッピーコーディング!

+0

これをまとめていただきありがとうございます。しかし、編集でエラーが発生します。 – BARNOWL

+0

@Owl Manでは、 '.text'を使用する代わりに' .get_attribute( "text") 'または' .get_attribute( "テキスト内容 ")。 –

+0

まだ仕事していない – BARNOWL

0

avとlnはWebElementなので、連結することはできません。 は、私はあなたがこのようにそれにアクセスする必要があるので、あなたはWebElementからテキストをしたいsupose:

f.write(ln.text + av.text + "\n") 
+0

これは本当ですが、今度は上記の編集でエラーが表示されます – BARNOWL

+0

これは新しいエラーと新しい質問です。エラーメッセージを参照する必要があります。 selenium.common.exceptions.StaleElementReferenceException:メッセージ:古い要素の参照:要素がページ文書に添付されていない==>これはエラーを理解するのに役立ちます:http://stackoverflow.com/questions/27003423/python-selenium- stale-element-fix – dima

関連する問題