如何使用python从硒的下拉框中选择项目

dav*_*yan 0 selenium xpath python-3.x selenium-webdriver dropdown

我正在尝试遍历下拉列表进行网络抓取,但是我发现我的代码无法正常工作

dropdown = browser.find_element_by_XPATH('//*[@id="department-dropdown"]')
select = Select(dropdown)

select.select_by_value("Accounting")
Run Code Online (Sandbox Code Playgroud)

我收到的错误消息

Traceback (most recent call last):
  File "C:\Users\David\eclipse-workspace\Web_Scrap\setup.py", line 31, in <module>
    dropdown = browser.find_element_by_XPATH('//*[@id="mainContent"]/div[1]/div/div[3]/div/div/span')
AttributeError: 'WebDriver' object has no attribute 'find_element_by_XPATH'
Run Code Online (Sandbox Code Playgroud)

目前,我试图选择至少第一个值,但它没有解决问题

我尝试循环浏览的下拉框中提供的图片带有“检查元素”

下拉框元素不是实际列表的一部分,这似乎有点令人困惑,有人可以让我知道这里的实际情况吗?如果我看错了。

如果有人对我可以怎样实现目标有任何建议

yon*_*ong 5

您的下拉框是一个CSS下拉列表,而不是仅由<select>and <option>标记实现的本机下拉列表。

下拉菜单的选项来自的li内部<ul class="typeahead typeahead-long dropdown-menu",只有在单击右侧的向下箭头后,它们才会附加到页面上。

在此处输入图片说明

的原因<select>很多<option>是上述li属性:data-value在这些属性上创建<option>。您可以认为这些<option>是的数据源li。因此<select>页面上不可见,就像前端后面的数据库一样提供数据,因此<select>设置的样式display: none意味着页面上不可见。

要充当用户行为,应在单击以展开全部之后从li内部查找并选择选项。而不是从不可见中选择选项或更改显示CSS值使其可见,然后从中选择选项。ulli<select>select

// click down arrow to expand all options
driver.find_element_by_css_selector(
    ".department-combobox .input-group > span").click();

// search all options
options = driver.find_elements_by_css_selector(
    ".department-combobox .input-group > ul > li")

// print all option text
for(opt in options):
    println opt.text

// select specific option by text
target = 'Anthropology'
driver.find_element_by_css_selector(
    ".department-combobox .input-group > ul")
    .find_element_by_xpath("./li[.="+target+"]")
    .click();
Run Code Online (Sandbox Code Playgroud)