我正尝试遍历下拉列表进行网络抓取,但我发现我的代码无法正常工作
dropdown = browser.find_element_by_XPATH('//*[@id="department-dropdown"]')
select = Select(dropdown)
select.select_by_value("Accounting")
我收到错误消息
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'
目前,我试图选择至少第一个值,但是它没有成功
The picture provided has the "inspect element" of the dropdown box i'm attempting to cycle through
这似乎有点令人困惑,因为下拉框元素不是实际列表的一部分,有人可以让我知道这里的实际情况吗?如果我看错了。
如果有人对我可以实现自己的目标有何建议
答案 0 :(得分:4)
您的下拉框是一个CSS下拉列表,而不是仅由<select>
和<option>
标签实现的本机下拉列表。
下拉菜单的选项来自li
内的<ul class="typeahead typeahead-long dropdown-menu"
,只有在单击右侧的向下箭头后,它们才会附加到页面上。
存在<select>
和许多<option>
的原因是上述li
的属性:在这些data-value
上创建的<option>
。您可以认为这些<option>
是li
的数据源。因此,<select>
在页面上不可见,就像前端后面的数据库一样提供数据,因此<select>
样式设置为display: none
,这意味着在页面上不可见。
要充当用户行为,请在li
内的ul
中单击并展开所有li
,然后在其中进行选择。而不是从不可见的<select>
中选择选项或更改select
的显示CSS值使其可见,然后从中选择选项。
// 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();