2017-04-13 14 views
2

最初はプログラミングでは新機能がありますが、私のコードはこれまでのところうまく機能していますが、自動化する方法を理解したいので、私はPythonコードを更新する必要はありません。プログラムを何度も繰り返します。Loop for Selenium and Python

プログラムは、特定の検索パラメータを使用して1年間にわたって「計画権限データ」をスクラップし、次にopenpyxlを使用してこれをExcelファイルに書き込みます。私は何をしようとしていることである

---

  1. 自動的に10年間にわたって検索
  2. が別のタブで、毎年を持っている(まだ年の検索によって年間でそれをしなければなりません)優れた

いずれかの問題について支援していただければ幸いです。その質問のために必要でなかったほとんどのジャンクコードを取り除こうとしました。

は、ここで私はプログラム

python3 UrlScript.py  

Url to grab information off of 
mainPage = "http://edevelopment.falkirk.gov.uk/online/search.do?action=advanced" 

from selenium import webdriver 
from selenium.webdriver.support.ui import Select 
from selenium.common.exceptions import NoSuchElementException 
from openpyxl import Workbook 
from openpyxl import load_workbook 

description = ["window"] 
ApplicationType = [0,11,12,31,32,33,46,47,61] 
#DecisionType 
startDate = "01/01/2012" 
endDate = "31/12/2012" 
error = False 
year = 2012 

#Excel 
wb = load_workbook('/Users/Caitlyn/Desktop/Program/Planning.xlsx') 
sheet = wb.get_sheet_by_name('Data') 
rowIndex = 2 
columnIndex = 1 

driver = webdriver.Chrome('/Users/Caitlyn/Downloads/chromedriver') 
driver.get(mainPage) 

# placing each description here 
sbox = driver.find_element_by_id("description") 
sheet.cell(row=rowIndex, column=columnIndex, value=description[0]) 
columnIndex = columnIndex + 1 
sbox.send_keys(description[0]) 

# here is where you will cycle through dates 
sbox = driver.find_element_by_id("applicationDecisionStart") 
sbox.send_keys(startDate) 
sbox = driver.find_element_by_id("applicationDecisionEnd") 
sbox.send_keys(endDate) 
sheet.cell(row=rowIndex, column=columnIndex, value=year) 
columnIndex = columnIndex + 1 


    if error: 
     resultsRow = rowIndex 
     while True: 
     column = driver.find_elements_by_class_name("searchresult") 
     pageResults = pageResults + len(column) 
     for element in column: 
      list = element.text.split("\n") 
      sheet.cell(row=rowIndex, column=columnIndex, value=list[0]) 
      columnIndex = columnIndex + 1 
      sheet.cell(row=rowIndex, column=columnIndex, value=list[1]) 
      columnIndex = columnIndex + 1 
      sheet.cell(row=rowIndex, column=columnIndex, value=list[2].split("|")[0]) 
      columnIndex = columnIndex - 2 
      rowIndex = rowIndex + 1 
     try: 
      submit = driver.find_element_by_class_name("next") 
      submit.click() 
      pageIndex = pageIndex + 1 
     except NoSuchElementException: 
      break 

     columnIndex = columnIndex - 1 
     sheet.cell(row=resultsRow, column=columnIndex, value=pageResults) 
     columnIndex = columnIndex - 1 
    else: 
     columnIndex = columnIndex - 1 
     sheet.cell(row=rowIndex, column=columnIndex, value=0) 
     columnIndex = columnIndex - 1 
     rowIndex = rowIndex + 1 

    driver.execute_script("window.history.go(-%d)" % pageIndex) 
    error = False 

    columnIndex = columnIndex - 1 

wb.save('/Users/Caitlyn/Desktop/Program/Planning.xlsx') 

答えて

0

最初にすべきことは、あなたのセレンコードからあなたopenpyxlコードを分離することができるような機能にダウンあなたのコードを破るであるために持っている私のコードです。

あなたのopenpyxlコードについては、できるだけws.cell(…)を使わないようにしてください。ws.append(…)を使用して既存のシートにセルのリストを追加することができます。これが不可能な場合は、enumerate()を使用して信頼できるカウンタを取得してください。

私は、今後の議論を部分的な質問をする方が簡単なopenpyxlメーリングリストに移すべきだと提案します。

+0

アドバイスをいただきありがとうございます。私はすべてを更新していくつもりです。 openpyxlメーリングリストにも感謝します:) –