Python/Selenium如何与隐藏的Select元素交互

Python/Selenium如何与隐藏的Select元素交互,python,html,selenium,xpath,hidden-field,Python,Html,Selenium,Xpath,Hidden Field,这是我需要选择特定选项的元素的HTML代码 <div class="ui-dropdownlistcontrol"> <select id="ApplicantTitle" name="ApplicantTitle" class="select2-hidden-accessible" data-select2-id="ApplicantTitle" tabindex="

这是我需要选择特定选项的元素的HTML代码

<div class="ui-dropdownlistcontrol">
<select id="ApplicantTitle" name="ApplicantTitle" class="select2-hidden-accessible" data-select2-id="ApplicantTitle" tabindex="-1" aria-hidden="true">
    <option value="0" selected="" data-select2-id="2">&nbsp;</option>
    <option value="1" data-select2-id="6">Mr</option>
    <option value="2" data-select2-id="7">Mrs</option>
    <option value="3" data-select2-id="8">Miss</option>
    <option value="4" data-select2-id="9">Ms</option>
    <option value="5" data-select2-id="10">Dr</option>
    <option value="6" data-select2-id="11">Prof</option>
    <option value="7" data-select2-id="12">Hon</option>
    <option value="8" data-select2-id="13">Sir</option>
    <option value="9" data-select2-id="14">Lord</option>
</select>
<span class="select2 select2-container select2-container--default select2-container--below" dir="ltr" data-select2-id="1" style="width: 100%;">
    <span class="selection">
        <span class="select2-selection select2-selection--single" role="combobox" aria-haspopup="true" aria-expanded="false" tabindex="-1" aria-disabled="false" aria-labelledby="select2-ApplicantTitle-container">
            <span class="select2-selection__rendered" id="select2-ApplicantTitle-container" role="textbox" aria-readonly="true">&nbsp;</span>
            <span class="select2-selection__arrow" role="presentation">
                <b role="presentation"></b>
            </span>
        </span>
    </span>
    <span class="dropdown-wrapper" aria-hidden="true"></span>
</span>
<span class="select2 select2-container select2-container--default" dir="ltr" data-select2-id="1" style="width: 100%;">
    <span class="selection">
        <span class="select2-selection select2-selection--single" role="combobox" aria-haspopup="true" aria-expanded="false" tabindex="0" aria-disabled="false" aria-labelledby="select2-ApplicantTitle-container">
            <span class="select2-selection__rendered" id="select2-ApplicantTitle-container" role="textbox" aria-readonly="true">&nbsp;</span>
            <span class="select2-selection__arrow" role="presentation">
                <b role="presentation"></b>
            </span>
        </span>
    </span>
    <span class="dropdown-wrapper" aria-hidden="true"></span>
</span>

先生
夫人
错过
太太
博士
教授
阁下
先生
贵族
Select元素是隐藏的,我不能简单地这样做
…通过xpath('./以下::选择//选项[text()=“Mr”]][0]查找元素[0]。单击()

如果选择
Mr
,则
span
元素内部的
将更改为所选选项

有人知道如何与隐藏
select
元素交互吗

或任何建议将不胜感激

编辑1:

driver.get("https://www.santanderforintermediaries.co.uk/calculators-and-forms/affordability/")
driver.implicitly_wait(10)

element1 = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.ID, "ddlMethodRepaymentSelectBoxIt")))
element1.click()

elements =  WebDriverWait(driver, 30).until(
            EC.visibility_of_all_elements_located((By.XPATH, "//ul[@id='ddlMethodRepaymentSelectBoxItOptions']//li[*]")))


expected_value = "Capital and interest"

for element in elements:
    if element.text == expected_value:
        element.click()
        break
我可以使用此id按element选择2 ApplicationTitle container,然后会显示下拉列表,但从打开的列表中选择的方法是什么?

请尝试下面的代码:

element = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//select[@name='ApplicantTitle']")))

driver.execute_script("arguments[0].scrollIntoView();", element)  

select = Select(element)
select.select_by_visible_text('Mr')
注意:将以下要点添加到您的解决方案中

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
您可以通过多种方式处理下拉列表:

  • 按索引选择索引(索引)
  • 按值选择值(值)
  • 按可视文本(文本)选择
  • **解决方案2:**

    driver.get('https://www.santanderforintermediaries.co.uk/calculators-and-forms/affordability/')
    wait = WebDriverWait(driver, 10)
    element= wait.until(EC.element_to_be_clickable((By.XPATH, "//span[@id='ddlMethodRepaymentSelectBoxIt']")))
    element.click()
    
    element1= wait.until(EC.element_to_be_clickable((By.XPATH, "//ul[@id='ddlMethodRepaymentSelectBoxItOptions']//li[4]/a")))
    element1.click()
    

    解决方案3:

    driver.get("https://www.santanderforintermediaries.co.uk/calculators-and-forms/affordability/")
    driver.implicitly_wait(10)
    
    element1 = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.ID, "ddlMethodRepaymentSelectBoxIt")))
    element1.click()
    
    elements =  WebDriverWait(driver, 30).until(
                EC.visibility_of_all_elements_located((By.XPATH, "//ul[@id='ddlMethodRepaymentSelectBoxItOptions']//li[*]")))
    
    
    expected_value = "Capital and interest"
    
    for element in elements:
        if element.text == expected_value:
            element.click()
            break
    
    请尝试以下代码:

    element = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//select[@name='ApplicantTitle']")))
    
    driver.execute_script("arguments[0].scrollIntoView();", element)  
    
    select = Select(element)
    select.select_by_visible_text('Mr')
    
    注意:将以下要点添加到您的解决方案中

    from selenium import webdriver
    from selenium.webdriver.common.keys import Keys
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    您可以通过多种方式处理下拉列表:

  • 按索引选择索引(索引)
  • 按值选择值(值)
  • 按可视文本(文本)选择
  • **解决方案2:**

    driver.get('https://www.santanderforintermediaries.co.uk/calculators-and-forms/affordability/')
    wait = WebDriverWait(driver, 10)
    element= wait.until(EC.element_to_be_clickable((By.XPATH, "//span[@id='ddlMethodRepaymentSelectBoxIt']")))
    element.click()
    
    element1= wait.until(EC.element_to_be_clickable((By.XPATH, "//ul[@id='ddlMethodRepaymentSelectBoxItOptions']//li[4]/a")))
    element1.click()
    

    解决方案3:

    driver.get("https://www.santanderforintermediaries.co.uk/calculators-and-forms/affordability/")
    driver.implicitly_wait(10)
    
    element1 = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.ID, "ddlMethodRepaymentSelectBoxIt")))
    element1.click()
    
    elements =  WebDriverWait(driver, 30).until(
                EC.visibility_of_all_elements_located((By.XPATH, "//ul[@id='ddlMethodRepaymentSelectBoxItOptions']//li[*]")))
    
    
    expected_value = "Capital and interest"
    
    for element in elements:
        if element.text == expected_value:
            element.click()
            break
    

    您可以先使用下面的CSS单击
    选择
    列表,然后选择项目

    listEle = driver.find_element_by_css_selector("select#ApplicantTitle")
    listEle.click()
    #Then you can select the option 
    listEle.find_element_by_xpath("./option[.='Mr']").click()
    

    您可以先使用下面的CSS单击
    选择
    列表,然后选择项目

    listEle = driver.find_element_by_css_selector("select#ApplicantTitle")
    listEle.click()
    #Then you can select the option 
    listEle.find_element_by_xpath("./option[.='Mr']").click()
    

    UI看起来像一个下拉列表,但它不一样。如果HTML中有一个Select标记,而没有包装在其他标记中,那么可以使用Selenium Select类来选择它

    在参考站点中,您需要模拟相同的单击操作,以便从下拉列表中选择值

    使用以下代码:

    driver.get("https://www.santanderforintermediaries.co.uk/calculators-and-forms/affordability/")
    driver.implicitly_wait(10)
    # click on dropdown
    driver.find_element_by_id("ddlMethodRepaymentSelectBoxIt").click()
    
    #get all dropdown element
    elements = driver.find_elements_by_css_selector("#ddlMethodRepaymentSelectBoxItOptions>li")
    
    expected_value = "Part and part - sale of mortgaged property"
    
    # loop through all all element and and check whether element has the expected value to select if yes the select and break out the loop
    for element in elements:
        if element.text == expected_value:
            element.click()
            break
    

    UI看起来像一个下拉列表,但它不一样。如果HTML中有一个Select标记,而没有包装在其他标记中,那么可以使用Selenium Select类来选择它

    在参考站点中,您需要模拟相同的单击操作,以便从下拉列表中选择值

    使用以下代码:

    driver.get("https://www.santanderforintermediaries.co.uk/calculators-and-forms/affordability/")
    driver.implicitly_wait(10)
    # click on dropdown
    driver.find_element_by_id("ddlMethodRepaymentSelectBoxIt").click()
    
    #get all dropdown element
    elements = driver.find_elements_by_css_selector("#ddlMethodRepaymentSelectBoxItOptions>li")
    
    expected_value = "Part and part - sale of mortgaged property"
    
    # loop through all all element and and check whether element has the expected value to select if yes the select and break out the loop
    for element in elements:
        if element.text == expected_value:
            element.click()
            break
    


    与我之前收到的相同,
    元素无法滚动到视图中
    +您的链接已断开;)同样的问题,这个select元素不可见,这就是问题所在。您可以共享您的url吗?最初你说的是滚动问题。很抱歉,每次你提供新的url时,都无法找到问题的根源。请共享真实URL,与我之前收到的相同
    元素无法滚动到视图中
    +您的链接已断开;)同样的问题,这个select元素不可见,这就是问题所在。您可以共享您的url吗?最初你说的是滚动问题。很抱歉,每次你提供新的url时,都无法找到问题的根源。请共享真实URL请检查类似问题:并检查此元素请检查类似问题:并检查此元素如何处理我的HTML?当我在
    li
    元素中没有选项列表时,您可以获得值的精确定位器。您共享的HTML似乎与您在单击
    select2 applicationtitle container
    dropdown popup时提到的要选择的元素不同,现在找到dropdown popup及其值这是无法从下拉列表中获取这些元素的问题-我在屏幕截图中看不到下拉列表值。我只能看到下拉元素,没有值。如果将检查器悬停,它将在控制台中显示该值,然后如何处理我的HTML?当我在
    li
    元素中没有选项列表时,您可以获得值的精确定位器。您共享的HTML似乎与您在单击
    select2 applicationtitle container
    dropdown popup时提到的要选择的元素不同,现在找到dropdown popup及其值这是无法从下拉列表中获取这些元素的问题-我在屏幕截图中看不到下拉列表值。我只能看到下拉元素,没有值。如果将检查器悬停,它将在控制台中显示值。您应该像用户一样与它交互。在UI中执行用户将要执行的任何操作以公开隐藏的SELECT。如果无法取消隐藏选择,那么您只能与UI交互。您应该像用户一样与UI交互。在UI中执行用户将要执行的任何操作以公开隐藏的SELECT。如果无法取消隐藏SELECT,则只能与UI交互。