【问题标题】:Selecting jquery dropdown list using XPATH使用 XPATH 选择 jquery 下拉列表
【发布时间】:2022-11-12 03:55:53
【问题描述】:

其实我正在做来自https://demo.seleniumeasy.com/jquery-dropdown-search-demo.html的任务。但是我发现了一个问题——我无法使用 XPATH 在此页面上找到任何元素。例如,我想使用 driver.find_element 和 XPATH 查找“选择国家/地区”:

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get("https://demo.seleniumeasy.com/jquery-dropdown-search-demo.html")

jquery_drop_list = driver.find_element(by=By.XPATH, value="//span[@class='select2-selection select2-selection--single']")

#jquery_drop_list = driver.find_element(by=By.XPATH, value="//span[@class='select2 select2-#container select2-container--default select2-container--above select2-container--focus']")

#jquery_drop_list = driver.find_element(by=By.XPATH, value="//span[@class='select2-hidden-#accessible']")

print(jquery_drop_list)

但上述搜索均无效。

你能告诉我一个合适的选择器应该是什么样子来解决类似的问题吗?也许 XPATH 选择器在这里不是一个好的选择?

【问题讨论】:

    标签: python html selenium selenium-webdriver xpath


    【解决方案1】:

    这里有一个选择块。
    为此,您需要使用 Selenium Select 对象。 此代码选择丹麦:

    from selenium import webdriver
    from selenium.webdriver import ActionChains
    from selenium.webdriver.chrome.service import Service
    from selenium.webdriver.chrome.options import Options
    from selenium.webdriver.support.select import Select
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
    options = Options()
    options.add_argument("start-maximized")
    
    webdriver_service = Service('C:webdriverschromedriver.exe')
    driver = webdriver.Chrome(options=options, service=webdriver_service)
    wait = WebDriverWait(driver, 20)
    actions = ActionChains(driver)
    
    url = "https://demo.seleniumeasy.com/jquery-dropdown-search-demo.html"
    
    driver.get(url)
    
    select_country = Select(wait.until(EC.element_to_be_clickable((By.ID, 'country'))))
    select_country.select_by_value("Denmark")
    

    但是,如果您仍想通过常规点击打开该下拉菜单,也可以。这个 XPath 有效:

    from selenium import webdriver
    from selenium.webdriver import ActionChains
    from selenium.webdriver.chrome.service import Service
    from selenium.webdriver.chrome.options import Options
    from selenium.webdriver.support.select import Select
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
    options = Options()
    options.add_argument("start-maximized")
    
    webdriver_service = Service('C:webdriverschromedriver.exe')
    driver = webdriver.Chrome(options=options, service=webdriver_service)
    wait = WebDriverWait(driver, 20)
    actions = ActionChains(driver)
    
    url = "https://demo.seleniumeasy.com/jquery-dropdown-search-demo.html"
    
    driver.get(url)
    
    wait.until(EC.element_to_be_clickable((By.XPATH, "//span[@aria-labelledby='select2-country-container']"))).click()
    

    通常,XPath 是使用 selenium 选择 Web 元素的最强大的方法。
    有些人只是不熟悉它:)
    有时某些 Web 驱动程序不正确支持某些 XPath,但如果您使用 Chromedriver,您将不会发现 XPath 有任何问题。

    【讨论】:

    • 非常感谢您的解决方案。 PS。据我所知,在 Selenium 4.6.0 中不再需要创建 Service 对象(不需要 exe 文件)
    • 实际上我用 Java 编写代码,那里没有这样的服务,但我会看一看。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-12
    • 2010-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-04
    相关资源
    最近更新 更多