2017-04-13 85 views
2

首先,我在編程方面超級新,但已經獲得我的代碼到目前爲止的工作,但想弄清楚如何自動化它,所以我不會不斷地更新我的Python代碼,並開始程序一遍又一遍。Selenium和Python循環

該程序使用特定的搜索參數在一年的時間內刮取「規劃權限數據」,然後使用openpyxl將其寫入excel文件。

我所試圖做的是---

  1. 自動搜索在10年期間(還有逐年搜索做上一年)
  2. 每年都在不同的標籤上在Excel中。

如果您對這兩個問題有任何幫助,將不勝感激。試圖擺脫大部分垃圾代碼,這是不必要的問題。

這裏是我的代碼,我有計劃

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郵件列表:) –