【问题标题】:How to click on an element from the Dropdown menu through Python and Selenium如何通过 Python 和 Selenium 从下拉菜单中单击元素
【发布时间】:2018-08-11 01:41:18
【问题描述】:

我正在尝试单击下拉菜单,但没有成功。 菜单由 javascript 激活。 我试图单击父 div 内的链接,但没有任何反应 这是一些代码:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import Select
from selenium.webdriver.chrome.options import Options

options = webdriver.ChromeOptions()
options.add_argument("--start-maximized")
driver = webdriver.Chrome(chrome_options=options)
driver.get("https://www.energisa.com.br/Paginas/login.aspx")
select_element = Select(driver.find_element_by_id('ddlEstado'))
select_element.select_by_value('MG')
# select by visible text
select_element.select_by_visible_text('MG')

【问题讨论】:

  • 排除明显的可能性 - 如果菜单未被禁用,您必须先启用它,然后才能单击其中的任何内容,即使使用 Selenium。

标签: python selenium selenium-webdriver xpath webdriverwait


【解决方案1】:

根据您的问题,网站https://www.energisa.com.br/Paginas/login.aspx dropdown 菜单不在Select 标记中,因此 Select 类在这里不起作用。

一旦访问了 url,您需要诱导 WebDriverWait 以使所需的 元素可点击,您可以使用以下解决方案:

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

driver = webdriver.Chrome()
driver.get("https://www.energisa.com.br/Paginas/login.aspx")
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//li[@class='estado']/div[@class='select2-container' and @id='s2id_ddlEstado']"))).click()
driver.find_element_by_xpath("//ul[@class='select2-results' and @id='select2-results-1']//li/div[normalize-space()='MG']").click()

【讨论】:

  • 很抱歉我的网络出现故障。你的一行代码我不明白normalize-space() 如果我使用 css 选择器怎么办!
  • 如果你用文本MG交叉检查元素,它不是一个innerHTML,所以为了避免空格,我们需要使用normalize-space()。您也可以使用css selectors
  • @ahmed.soli 你能就你的新要求提出一个新问题吗?谢谢
  • @ahmed.soli 这个问题本身就是一个完整的用例。由于您已收到经过充分研究的答案,因此您不应按照 stackoverflow 标准更改问题。如果您的要求发生了变化,请随时提出新问题。 Stackoverflow 志愿者很乐意为您提供帮助。
【解决方案2】:

您尝试单击的下拉菜单实际上不是SELECT 元素,因此您不能使用Select 类。您尝试单击的 SELECT 只是一个支持元素,但它是不可见的,因此您无法与之交互。

要完成这项工作,您需要单击下拉元素以显示选项,然后单击所需的选项。

driver.find_element_by_css_selector("#s2id_ddlEstado > a").click()
driver.find_element_by_xpath("//ul[@id='select2-results-1']/li[.='MG']").click()

这是未经测试的代码,因此您可能需要添加等待...

【讨论】:

  • 我已经尝试过这种方法,但我得到了错误the element is not clickable
【解决方案3】:

看起来像select_list的不是select_list,这种select_list的目的是,我们可以写入text_field,从巨大的list中取出元素,如果你输入'M',那么所有的将显示具有 M 的选项。

编写以下代码,它会工作。

WebDriverWait(driver,10).until(EC.invisibility_of_element_located((By.ID,"loadingContent")))
driver.find_element_by_id("s2id_ddlEstado").click
driver.find_element_by_xpath("//ul[@id='select2-results-1']//div[text()='MG']").click

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-05
    • 1970-01-01
    • 1970-01-01
    • 2016-11-12
    • 1970-01-01
    • 2015-06-13
    • 2023-03-16
    • 1970-01-01
    相关资源
    最近更新 更多