python - Python、selenium 机器人下拉选择
问题描述
我正在尝试从一个名为 Correios 的网站获取所有数据,在这个网站上,我需要处理一些我遇到问题的下拉菜单,例如:有两个下拉菜单有一些依赖性,我想创建一个通过的机器人通过下拉菜单中每个项目的所有选项并获取数据。
from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support.select import Select
chrome_path = r"C:\\Users\\Gustavo\\Desktop\\geckodriver\\chromedriver.exe"
driver = webdriver.Chrome(chrome_path)
lista_x = []
driver.get("http://www2.correios.com.br/sistemas/agencias/")
driver.maximize_window()
dropdownEstados = driver.find_elements_by_xpath("""//*[@id="estadoAgencia"]""")
optEstados = driver.find_elements_by_xpath("""//*[@id='estadoAgencia']/option""")
optMunicipios = driver.find_elements_by_xpath("""//*[@id="municipioAgencia"]/option""")
for valores in optEstados:
encoded = valores.text.encode()
valores.click()
for municipio in optMunicipios:
municipio.click()
有两个下拉菜单,一个选择州,另一个选择县,第二个直接取决于第一个。我想知道在选择一个州后如何通过所有县选项,对所有州都这样做。
输出:
selecting Estado ACRE
...selecting Municipio ACRELANDIA
...selecting Municipio ASSIS BRASIL
...selecting Municipio BRASILEIA
...selecting Municipio BUJARI
...selecting Municipio CAPIXABA
...selecting Municipio CRUZEIRO DO SUL
...selecting Municipio EPITACIOLANDIA
...selecting Municipio FEIJO
...selecting Municipio JORDAO
...selecting Municipio MANCIO LIMA
...selecting Municipio MANOEL URBANO
...selecting Municipio MARECHAL THAUMATURGO
...selecting Municipio PLACIDO DE CASTRO
...selecting Municipio PORTO ACRE
...selecting Municipio PORTO WALTER
...selecting Municipio RIO BRANCO
...selecting Municipio RODRIGUES ALVES
...selecting Municipio SANTA ROSA DO PURUS
...selecting Municipio SENA MADUREIRA
...selecting Municipio SENADOR GUIOMARD
...selecting Municipio TARAUACA
...selecting Municipio XAPURI
selecting Estado ALAGOAS
...selecting Municipio AGUA BRANCA
...selecting Municipio ANADIA
...selecting Municipio ARAPIRACA
...selecting Municipio ATALAIA
...selecting Municipio BARRA DE SANTO ANTONIO
...selecting Municipio BARRA DE SAO MIGUEL
...selecting Municipio BATALHA
...selecting Municipio BELEM
...selecting Municipio BELO MONTE
...selecting Municipio BOCA DA MATA
...selecting Municipio BRANQUINHA
...selecting Municipio CACIMBINHAS
...selecting Municipio CAJUEIRO
...selecting Municipio CAMPESTRE
...selecting Municipio CAMPO ALEGRE
...selecting Municipio CAMPO GRANDE
...selecting Municipio CANAPI
...selecting Municipio CAPELA
...selecting Municipio CARNEIROS
...selecting Municipio CHA PRETA
...selecting Municipio COITE DO NOIA
...selecting Municipio COLONIA LEOPOLDINA
...selecting Municipio COQUEIRO SECO
...selecting Municipio CORURIPE
...selecting Municipio CRAIBAS
...selecting Municipio DELMIRO GOUVEIA
...selecting Municipio DOIS RIACHOS
...selecting Municipio ESTRELA DE ALAGOAS
...selecting Municipio FEIRA GRANDE
...selecting Municipio FELIZ DESERTO
...selecting Municipio FLEXEIRAS
...selecting Municipio GIRAU DO PONCIANO
...selecting Municipio IBATEGUARA
...selecting Municipio IGACI
...selecting Municipio IGREJA NOVA
...selecting Municipio INHAPI
...selecting Municipio JACARE DOS HOMENS
...selecting Municipio JACUIPE
...selecting Municipio JAPARATINGA
...selecting Municipio JARAMATAIA
...selecting Municipio JEQUIA DA PRAIA
...selecting Municipio JOAQUIM GOMES
...selecting Municipio JUNDIA
...selecting Municipio JUNQUEIRO
...selecting Municipio LAGOA DA CANOA
...selecting Municipio LIMOEIRO DE ANADIA
...selecting Municipio MACEIO
...selecting Municipio MAJOR ISIDORO
...selecting Municipio MAR VERMELHO
...selecting Municipio MARAGOGI
...selecting Municipio MARAVILHA
...selecting Municipio MARECHAL DEODORO
...selecting Municipio MARIBONDO
...selecting Municipio MATA GRANDE
...selecting Municipio MATRIZ DE CAMARAGIBE
...selecting Municipio MESSIAS
...selecting Municipio MINADOR DO NEGRAO
...selecting Municipio MONTEIROPOLIS
...selecting Municipio MURICI
...selecting Municipio NOVO LINO
...selecting Municipio OLHO D'AGUA DAS FLORES
...selecting Municipio OLHO D'AGUA DO CASADO
...selecting Municipio OLHO D'AGUA GRANDE
...selecting Municipio OLIVENCA
...selecting Municipio OURO BRANCO
...selecting Municipio PALESTINA
...selecting Municipio PALMEIRA DOS INDIOS
...selecting Municipio PAO DE ACUCAR
...selecting Municipio PARICONHA
...selecting Municipio PARIPUEIRA
...selecting Municipio PASSO DE CAMARAGIBE
...selecting Municipio PAULO JACINTO
...selecting Municipio PENEDO
...selecting Municipio PIACABUCU
...selecting Municipio PILAR
...selecting Municipio PINDOBA
...selecting Municipio PIRANHAS
...selecting Municipio POCO DAS TRINCHEIRAS
...selecting Municipio PORTO CALVO
...selecting Municipio PORTO DE PEDRAS
...selecting Municipio PORTO REAL DO COLEGIO
...selecting Municipio QUEBRANGULO
...selecting Municipio RIO LARGO
...selecting Municipio ROTEIRO
...selecting Municipio SANTANA DO IPANEMA
...selecting Municipio SANTANA DO MUNDAU
...selecting Municipio SAO BRAS
...selecting Municipio SAO JOSE DA LAJE
...selecting Municipio SAO JOSE DA TAPERA
...selecting Municipio SAO LUIS DO QUITUNDE
...selecting Municipio SAO MIGUEL DOS CAMPOS
...selecting Municipio SAO MIGUEL DOS MILAGRES
...selecting Municipio SAO SEBASTIAO
...selecting Municipio SATUBA
...selecting Municipio SENADOR RUI PALMEIRA
...selecting Municipio TANQUE D'ARCA
...selecting Municipio TAQUARANA
...selecting Municipio TEOTONIO VILELA
...selecting Municipio TRAIPU
...selecting Municipio UNIAO DOS PALMARES
...selecting Municipio VICOSA
[Decode error - output not utf-8]
...selecting Municipio AGUA BRANCA
...selecting Municipio ANADIA
...selecting Municipio ARAPIRACA
...selecting Municipio ATALAIA
...selecting Municipio BARRA DE SANTO ANTONIO
...selecting Municipio BARRA DE SAO MIGUEL
...selecting Municipio BATALHA
...selecting Municipio BELEM
...selecting Municipio BELO MONTE
...selecting Municipio BOCA DA MATA
...selecting Municipio BRANQUINHA
...selecting Municipio CACIMBINHAS
...selecting Municipio CAJUEIRO
...selecting Municipio CAMPESTRE
...selecting Municipio CAMPO ALEGRE
...selecting Municipio CAMPO GRANDE
...selecting Municipio CANAPI
...selecting Municipio CAPELA
...selecting Municipio CARNEIROS
...selecting Municipio CHA PRETA
...selecting Municipio COITE DO NOIA
...selecting Municipio COLONIA LEOPOLDINA
...selecting Municipio COQUEIRO SECO
...selecting Municipio CORURIPE
...selecting Municipio CRAIBAS
...selecting Municipio DELMIRO GOUVEIA
...selecting Municipio DOIS RIACHOS
...selecting Municipio ESTRELA DE ALAGOAS
...selecting Municipio FEIRA GRANDE
...selecting Municipio FELIZ DESERTO
...selecting Municipio FLEXEIRAS
...selecting Municipio GIRAU DO PONCIANO
...selecting Municipio IBATEGUARA
...selecting Municipio IGACI
...selecting Municipio IGREJA NOVA
...selecting Municipio INHAPI
...selecting Municipio JACARE DOS HOMENS
...selecting Municipio JACUIPE
...selecting Municipio JAPARATINGA
...selecting Municipio JARAMATAIA
...selecting Municipio JEQUIA DA PRAIA
...selecting Municipio JOAQUIM GOMES
...selecting Municipio JUNDIA
...selecting Municipio JUNQUEIRO
...selecting Municipio LAGOA DA CANOA
...selecting Municipio LIMOEIRO DE ANADIA
...selecting Municipio MACEIO
...selecting Municipio MAJOR ISIDORO
...selecting Municipio MAR VERMELHO
...selecting Municipio MARAGOGI
...selecting Municipio MARAVILHA
...selecting Municipio MARECHAL DEODORO
...selecting Municipio MARIBONDO
...selecting Municipio MATA GRANDE
...selecting Municipio MATRIZ DE CAMARAGIBE
...selecting Municipio MESSIAS
...selecting Municipio MINADOR DO NEGRAO
...selecting Municipio MONTEIROPOLIS
...selecting Municipio MURICI
...selecting Municipio NOVO LINO
...selecting Municipio OLHO D'AGUA DAS FLORES
...selecting Municipio OLHO D'AGUA DO CASADO
...selecting Municipio OLHO D'AGUA GRANDE
...selecting Municipio OLIVENCA
...selecting Municipio OURO BRANCO
...selecting Municipio PALESTINA
...selecting Municipio PALMEIRA DOS INDIOS
...selecting Municipio PAO DE ACUCAR
...selecting Municipio PARICONHA
...selecting Municipio PARIPUEIRA
...selecting Municipio PASSO DE CAMARAGIBE
解决方案
这行得通
time.sleep(3) #this time allows the page load all the elements
estadoList = Select(driver.find_element_by_name('estadoAgencia'))
for index in range(1,len(estadoList.options)):
select = Select(driver.find_element_by_name('estadoAgencia'))
print("selecting Estado",select.options[index].text)
select.select_by_index(index)
time.sleep(2)
municípioList = Select(driver.find_element_by_name('municipioAgencia'))
for index_b in range(1,len(municípioList.options)):
select_b = Select(driver.find_element_by_name('municipioAgencia'))
print("...selecting Municipio",select_b.options[index_b].text)
select_b.select_by_index(index_b)
time.sleep(2)
在导入中使用以下内容
import time
推荐阅读
- application-security - 在标头中发送 Anti-CSRF 令牌是一种好习惯吗?
- python - 如何使用 Python 管理来自 websocket 日期提要的执行顺序
- python - google.cloud.pubsub_v1 和 google.pubsub_v1 有什么区别?
- pine-script - 如何在pine脚本中编写从开始时间和结束时间(意味着在一定时间范围内)之间的最低点到最高点的趋势线
- html - 用于在 Facebook 中共享的 Angular 元服务 html 按钮
- javascript - 当元素被涂成蓝色时,会运行哪个 javascript 事件?
- c# - 在 Winforms 项目中使用按钮单击作为键盘条目 - SendKeys 不起作用
- javascript - JavaScript:变量可以用作循环语句吗?
- json - 如何通过 GraphQL 从 json 获取数据并在 gatsby 中创建动态页面?
- ag-grid - 如何从复选框中将文本包装在 ag-grid 中