使用Chrome Webdriver Python选择下拉列表的第二个元素

2024-06-14 06:52:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我想使用Chrome webdriver在以下网站中选择“TIPOPARTICIPANTE”下拉列表的第二个元素:

https://www.rad.cvm.gov.br/ENET/frmConsultaExternaCVM.aspx

我可以通过以下方式选择下拉列表:

from selenium import webdriver
driver = webdriver.Chrome('D:\\chromeDriver\\chromedriver.exe') # caminho onde o chromedriver.exe está
driver.get('https://www.rad.cvm.gov.br/ENET/frmConsultaExternaCVM.aspx')

dropdown_list = driver.find_element_by_css_selector('#s2id_cboTipoParticipante')
dropdown_list.click()

option = driver.find_element_by_css_selector('li:nth-child(2)') 
option.click() # este comando gerou um erro 'ElementClickInterceptException'

但是,在脚本的最后一行中,我得到了以下错误:

Traceback (most recent call last): File "", line 5, in option2.click() File "C:\Users\Raphael\Anaconda3\lib\site-packages\selenium\webdriver\remote\webelement.py", line 80, in click self._execute(Command.CLICK_ELEMENT) File "C:\Users\Raphael\Anaconda3\lib\site-packages\selenium\webdriver\remote\webelement.py", line 633, in _execute return self._parent.execute(command, params) File "C:\Users\Raphael\Anaconda3\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute self.error_handler.check_response(response) File "C:\Users\Raphael\Anaconda3\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response raise exception_class(message, screen, stacktrace) ElementClickInterceptedException: element click intercepted: Element li class="select2-search-field".../li is not clickable at point (819, 118). Other element would receive the click: div id="select2-drop-mask" class="select2-drop-mask" style=""/div (Session info: chrome=90.0.4430.93)

有人能帮我选择这个下拉列表的第二个元素(“Companias Abertas”)吗


Tags: inremotelibpackagesdriverseleniumlinesite
2条回答

1在代码中使用显式等待: 对于此导入:

from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

2等待加载器消失。对于此用途:invisibility_of_element_located方法

3第二个选项的定位器是#select2-drop li:nth-child(3) div,而不是li:nth-child(2)。有六个元素具有您指定的定位器

定位器说明:

#select2-drop-id为的父类select2-drop

li:nth-child(3) div第三个孩子,因为第一个是nth-child(3)。你需要一个李的孩子

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome(executable_path='/snap/bin/chromium.chromedriver')
driver.get('https://www.rad.cvm.gov.br/ENET/frmConsultaExternaCVM.aspx')
wait = WebDriverWait(driver, 15)
wait.until(EC.invisibility_of_element_located((By.CSS_SELECTOR, "div[id=divSplash]")))
wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "#s2id_cboTipoParticipante"))).click()
wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "#select2-drop li:nth-child(3) div"))).click()

结果: 下拉选择 enter image description here

尝试这样定义option

option=driver.find_elements_by_css_selector('span.select2 match')[2]

相关问题 更多 >