Selenium和Python的循环

Selenium和Python的循环,python,loops,selenium,selenium-chromedriver,openpyxl,Python,Loops,Selenium,Selenium Chromedriver,Openpyxl,首先,我对编程非常陌生,但到目前为止,我的代码都能正常工作,但我想知道如何使其自动化,因此我不必不断更新python代码,并反复启动程序 该程序使用特定的搜索参数在一年内提取“规划机构数据”,然后使用openpyxl将其写入excel文件 我想做的是--- 在10年内自动搜索(仍需逐年搜索) 在excel中的不同选项卡上显示每年 如果您在这两个问题上有任何帮助,我们将不胜感激。试图摆脱大多数垃圾代码,这些代码对于问题来说是不必要的 这是我的程序代码 python3 UrlScript.py

首先,我对编程非常陌生,但到目前为止,我的代码都能正常工作,但我想知道如何使其自动化,因此我不必不断更新python代码,并反复启动程序

该程序使用特定的搜索参数在一年内提取“规划机构数据”,然后使用openpyxl将其写入excel文件

我想做的是---

  • 在10年内自动搜索(仍需逐年搜索)
  • 在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')
    

    首先要做的是将代码分解成函数,这样就可以将openpyxl代码与Selenium代码分开

    关于openpyxl代码:您应该尽量避免使用
    ws.cell(…)
    :您可以使用
    ws.append(…)
    将单元格列表附加到现有工作表中。如果不可能,则使用
    enumerate()
    获取可靠的计数器


    我建议将进一步的讨论转移到openpyxl邮件列表,在那里可以更容易地提出部分问题。

    谢谢您的建议。我现在要做的就是更新所有的东西。同时感谢您提供openpyxl邮件列表:)