如何通过 Python 和 Selenium 单击下拉菜单中的元素
How to click on an element from the Dropdown menu through Python and Selenium
我想点击下拉菜单,但没有成功。
菜单由 javascript 激活。
我试图点击父级 div 中的 link 但没有任何反应
这是一些代码:
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')
您尝试点击的下拉列表实际上不是 SELECT
元素,因此您不能使用 Select
class。您尝试单击的 SELECT
只是一个支持元素,但它是不可见的,因此您无法与之交互。
要完成这项工作,您需要单击下拉元素以显示选项,然后单击所需的选项。
driver.find_element_by_css_selector("#s2id_ddlEstado > a").click()
driver.find_element_by_xpath("//ul[@id='select2-results-1']/li[.='MG']").click()
这是未经测试的代码,因此您可能需要等待...
出现select_list的不是select_list,这种select_list的目的是,我们可以写到text_field里面去挑从巨大的列表中提取元素,如果您输入 '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
根据您的问题,网站 https://www.energisa.com.br/Paginas/login.aspx
下拉菜单 菜单不在 Select
标签中,因此 Select class 在这里不起作用。
访问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()
我想点击下拉菜单,但没有成功。 菜单由 javascript 激活。 我试图点击父级 div 中的 link 但没有任何反应 这是一些代码:
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')
您尝试点击的下拉列表实际上不是 SELECT
元素,因此您不能使用 Select
class。您尝试单击的 SELECT
只是一个支持元素,但它是不可见的,因此您无法与之交互。
要完成这项工作,您需要单击下拉元素以显示选项,然后单击所需的选项。
driver.find_element_by_css_selector("#s2id_ddlEstado > a").click()
driver.find_element_by_xpath("//ul[@id='select2-results-1']/li[.='MG']").click()
这是未经测试的代码,因此您可能需要等待...
出现select_list的不是select_list,这种select_list的目的是,我们可以写到text_field里面去挑从巨大的列表中提取元素,如果您输入 '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
根据您的问题,网站 https://www.energisa.com.br/Paginas/login.aspx
下拉菜单 菜单不在 Select
标签中,因此 Select class 在这里不起作用。
访问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()