Python 如何在使用selenium键入后从数据列表中选择选项

Python 如何在使用selenium键入后从数据列表中选择选项,python,selenium-webdriver,xpath,css-selectors,webdriverwait,Python,Selenium Webdriver,Xpath,Css Selectors,Webdriverwait,我正在尝试使用selenium从datalist中选择一个选项。首先,从键发送选项名称,然后向下发送箭头以选择它。一切顺利,直到发送回车键,它不会采取任何行动。我必须按下并输入键,使提交按钮可点击,不能修改HTML代码 ... <input _ngcontent-njw-c0="" list="salesmans" placeholder="Selecciona Cliente o Vendedor" style="wi

我正在尝试使用selenium从datalist中选择一个选项。首先,从键发送选项名称,然后向下发送箭头以选择它。一切顺利,直到发送回车键,它不会采取任何行动。我必须按下并输入键,使提交按钮可点击,不能修改HTML代码

...
<input _ngcontent-njw-c0="" list="salesmans" placeholder="Selecciona Cliente o Vendedor" style="width: 100%;border: none;">
<datalist _ngcontent-njw-c0="" id="salesmans">
<option _ngcontent-njw-c0="" value="Vendedor Venta" ng-reflect-value="Vendedor Venta"></option>
<option _ngcontent-njw-c0="" value="juan peña hjvgvghghc" ng-reflect-value="juan peña hjvgvghghc"></option>
...
我试过了

  • 将全名发送到输入
  • 一起发送和输入键
  • 发送返回键
这是datalist HTML代码

...
<input _ngcontent-njw-c0="" list="salesmans" placeholder="Selecciona Cliente o Vendedor" style="width: 100%;border: none;">
<datalist _ngcontent-njw-c0="" id="salesmans">
<option _ngcontent-njw-c0="" value="Vendedor Venta" ng-reflect-value="Vendedor Venta"></option>
<option _ngcontent-njw-c0="" value="juan peña hjvgvghghc" ng-reflect-value="juan peña hjvgvghghc"></option>
...
元素图像:


要从数据列表中选择选项,文本为卖方或文塔,使用而不是向下发送
键,因为所需元素是一个元素,请同时输入
键,单击需要归纳的元素,然后可以使用以下任一选项:

  • 使用
    CSS\u选择器

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input[placeholder="Selecciona Cliente o Vendedor"]"))).send_keys(user_auth_data[2])
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "option[value='Vendedor Venta'][ng-reflect-value='Vendedor Venta']"))).click()
    
  • 使用
    XPATH

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@placeholder="Selecciona Cliente o Vendedor"]"))).send_keys(user_auth_data[2])
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//option[@value='Vendedor Venta' and @ng-reflect-value='Vendedor Venta']"))).click()
    
  • 注意:您必须添加以下导入:

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

您可以尝试以下选项

  • 尝试将全名发送到输入,然后尝试先手动按下“回车”或“制表”按钮。(如果其中任何一项有效,那么您可以在输入全名后在代码中发送该密钥)

  • 尝试将全名发送到输入,然后找到要选择的选项的XPath。另外请注意,一个选项(您要选择的)的XPath在发送完整名称后,可能会与原来的一次不同。所以请考虑一下。

  • 我面临着一个类似的问题,第二个选项对我很有效,但是,我是用Python而不是Python实现的

    谢谢


    我尝试实现该解决方案,但收到错误消息:javascript错误:选项元素不在select中。为什么会这样?