【问题标题】:Selecting items from a dropdown list with Selenium使用 Selenium 从下拉列表中选择项目
【发布时间】:2021-06-08 12:15:09
【问题描述】:

我正在尝试使用 Selenium 从下拉列表中选择不同的元素,但遇到以下错误消息:

NoSuchElementException Traceback(最近调用 最后)在 21 驱动程序.get(next_url) 22 ---> 23 sel = Select(driver.find_element_by_xpath('//*[@id="j_id23:j_id44"]')) 24 25 sel.select_by_visible_text("A CORUÑA")


import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.expected_conditions import presence_of_element_located
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support.ui import Select
from webdriver_manager.chrome import ChromeDriverManager

start_time = time.time()

name_abogado = []
surname_abogado = []
num_col_abogado = []
province_abogado = []

next_url = "https://www.abogacia.es/servicios-abogacia/censo-de-letrados/"

driver = webdriver.Chrome(ChromeDriverManager().install())

driver.get(next_url)

sel = Select(driver.find_element_by_xpath('//*[@id="j_id23:j_id44"]'))
    
sel.select_by_visible_text("A CORUÑA")
        
wait = WebDriverWait(driver, 5)
button = wait.until(presence_of_element_located((By.XPATH, '//*[@id="j_id23:idBuscar"]')))
button.click()
    
time.sleep(1)
    
abogados = driver.find_element_by_class_name(' iceRowSelMouseOver')
        
print(abogados)

【问题讨论】:

  • URL https://www.abogacia.es/servicios-abogacia/censo-de-letrados/ 正确吗?我没有看到任何下拉列表.. 可能是访问被拒绝.. 无论如何共享 HTML 代码,并检查是否涉及 iframe

标签: python selenium


【解决方案1】:

这里有几个问题:

  1. 您错过了延迟/之前的等待
driver.find_element_by_xpath('//*[@id="j_id23:j_id44"]')

你应该在那里添加一个等待,像这样:

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

wait = WebDriverWait(driver, 20)

wait.until(EC.visibility_of_element_located((By.XPATH, '//*[@id="j_id23:j_id44"]')))
sel = Select(driver.find_element_by_xpath('//*[@id="j_id23:j_id44"]'))
  1. 您的定位器似乎有误。
    我无法访问该页面,但 '//*[@id="j_id23:j_id44"]' 似乎不是一个稳定的 XPath 表达式

【讨论】:

  • 我不认为它与显式等待有任何关系,我猜是 iframe 问题。
  • 他没有任何形式的等待或睡眠,也没有使用隐式等待,所以无论如何它都会失败
  • 等待是好的,但不是必须的。您无需等待即可自动化Google search,甚至可能无需等待即可选择。
  • 我很确定这里不是这种情况
【解决方案2】:

您尝试访问的元素位于框架内。通过

切换到框架
driver.switch_to.frame(driver.find_element_by_xpath(".//iframe[contains(@src,'homeColegiados')]"))


select = Select(driver.find_element_by_xpath(".//select[@class='iceSelOneMnu']"))
select.select_by_visible_text("A CORUÑA")

【讨论】:

  • 谢谢@itronic1990,这解决了问题。但是,我并不真正了解框架机制,因此无法进入下一步,即访问包含在 xpath 中的 A Coruña 律师的第一个元素://*[@id="j_id23:tablaElementos:0 "]。非常感谢
  • 不客气 :) 请考虑接受或支持答案
  • 我已经投票了 :)。要跟进这个...我将如何找到 xpath 元素 //*[@id="j_id23:tablaElementos:0"]。我已经使用您上面概述的相同方法来定位按钮,但它显然也没有找到元素......
  • @id="j_id23:tablaElementos:0 是什么元素?
  • 拉科鲁尼亚的第一批律师...我想下载表格中的所有元素(姓名、姓氏等)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多