2017-03-20 11 views
0

のために、私はExcelスプレッドシート内のループのためにデータを書き込むしようとしている中でcsvファイルを書き込むことはできません、私は最終的には、次のようなコードを持つようにしたいです、それは私がそれ好きな方法を動作しませんので、私はこのようにそれを行う必要があり、ここでセレンPythonが適切にループ

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" 
     self.f.write(self.headers) 

    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] 
      f.write(ln.text + ",") 
      self.getLn(ln) 
      ln = ln.click() 
      av = driver.find_element_by_xpath('/html/body/section/section/section/div[1]/p[1]/span[2]') 
      f.write(av.txt + "\n") 
      self.getAv(av) 

      back = driver.find_element_by_xpath('/html/body/section/header/nav/ul/li[3]/p/a').click() 
      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() 

以下のコードは、それは動作しますが、それは輸出をdoes't私もそれが欲しいのようにCSV上で。

私は最終的に、このように同じ行にまとめて出力したい:

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

私はどのように行うだろうこの ?

+0

あなたが実際にあなたは何... 'csv'モジュールを使用することはありませんここに質問?あなたは何をしたいのですか?あなたは何を得ていますか? –

+0

ループ のために、私は はAttributeErrorを取得するにはどのように私は f.write(ln.text + "" + av.text + "\ n" は) を書くでしょう: 'NoneType' オブジェクトが「何の属性を持っていませんテキスト ' – BARNOWL

+0

エラーが発生した場合は、質問に投稿する必要があります。 –

答えて

1

それは深刻な文体の問題を持っているので、私は非常にコードレビューにあなたのコードを取って推薦するが、これはあなたの当面の問題を解決する必要があります。

for i in range(0, size): 
    ln = driver.find_elements_by_xpath('//*[@id="sortable-results"]/ul/li/p/a') 
    ln = ln[i] 
    ln_text = ln.text # copy the text for usage later 
    self.getLn(ln) 
    ln.click() 
    av = driver.find_element_by_xpath('/html/body/section/section/section/div[1]/p[1]/span[2]') 
    f.write(ln_text + ',' + av.text + "\n") # write both parts 
    self.getAv(av) 

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

聖なる牛、働いた、ありがとう – BARNOWL