gpt4 book ai didi

python - Selenium 和 Python 的循环

转载 作者:行者123 更新时间:2023-12-05 07:43:46 25 4
gpt4 key购买 nike

首先,我在编程方面是 super 新手,但到目前为止我的代码已经可以工作了,但我想弄清楚如何自动化它,所以我不必不断地更新我的 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')

最佳答案

首先应该做的是将您的代码分解为函数,以便您可以将 openpyxl 代码与 Selenium 代码分开。

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

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

关于python - Selenium 和 Python 的循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43398598/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com