如何使用 selenium chromewebdriver / python 选择/单击下拉列表内容

How to select/click in a dropdown content using selenium chromewebdriver / python

提问人:DLP 提问时间:4/6/2019 最后编辑:DebuggerDLP 更新时间:4/6/2019 访问量:1539

问:

我的网站表单已更新,我的脚本不再工作。我无法修复它,因为我无法找到如何使用 selenium chrome Web 驱动程序和 python 在下拉列表中进行选择。

formattedstate 是格式化数据(从文件中读取)的值

driver.find_element_by_css_selector(f"option[title='{formattedState}']").click()

driver.find_element_by_xpath("//*[text()='{formattedState}']").click()

driver.find_element_by_css_selector(f"option[value='{formattedState}']").click()

这是 Web 表单中下拉列表内容的数据。我在下拉列表中选择了第一个州=阿拉巴马州

<input aria-valuetext="" role="combobox" tabindex="0" 
placeholder="State/Province/Region" readonly="" height="100%" size="1" autocomplete="off" value="" data-spm-anchor-id="a2g0o.placeorder.0.i14.5f0b321eC7zfLx">



<li class="next-menu-item" title="Alabama" data-spm-anchor-id="a2g0o.placeorder.0.i17.5f0b321eC7zfLx">Alabama</li>

它应该在下拉列表内容中选择正确的状态

python selenium xpath css-selectors chrome-web-driver

评论


答:

1赞 Sers 4/6/2019 #1

首先尝试单击组合框,然后等待 state option() 元素可见并单击。li

在下面的代码中,我使用了 css 选择器来获取 .如果要按文本查找元素,请使用:lititle
wait.until(ec.visibility_of_element_located((By.XPATH, f"//li[.='{state}' and @class = 'next-menu-item']"))).click()

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

driver = webdriver.Chrome()
wait = WebDriverWait(driver, 10)

state = "Alabama"
driver.find_element_by_css_selector('input[placeholder="State/Province/Region"]').click()
wait.until(ec.visibility_of_element_located((
    By.CSS_SELECTOR, f"li.next-menu-item[title='{state}']"))).click()
0赞 Naveen 4/6/2019 #2

JS SetAttribute 对 Combobox 的效果出奇地好。尝试

JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("document.getElementById('//id of element').setAttribute('value', '//value to set')");
// to click
js.executeScript("arguments[0].click();", element);