Selenium+Python想要实现:可以点击到对应的 选项 按钮,并选择下拉的某个值,比如5
selenium click select option and choose value
How to Select Option from DropDown using Selenium Webdriver
How to select a dropdown value in Selenium WebDriver using Java – Stack Overflow
此处不是select,子元素也不是option
且可以选择的value也没有,只有子元素a,里面的data-m的值是个json字符串,最后包含:itemCount":5,表示是第五个。
<ul id=”22bc22dd-ef9d-4d3c-8de9-1e7bc704f9f9_menu” role=”group” aria-labelledby=”22bc22dd-ef9d-4d3c-8de9-1e7bc704f9f9″ class=”dropdown-menu”>
<li role=”option”>
<a data-m=”{"aN":"shoppingCart","cN":"UpdateQuantity","bhvr":91,"pid":"8X58XHDX57SX","sku":"F96R","itemCount":1}” id=”22bc22dd-ef9d-4d3c-8de9-1e7bc704f9f9_menuItem_1″ class=”ember-view x-hidden-focus”> 1
</a> </li>
<li role=”option”>
<a data-m=”{"aN":"shoppingCart","cN":"UpdateQuantity","bhvr":91,"pid":"8X58XHDX57SX","sku":"F96R","itemCount":2}” id=”22bc22dd-ef9d-4d3c-8de9-1e7bc704f9f9_menuItem_2″ class=”ember-view”> 2
</a> </li>
<li role=”option”>
<a data-m=”{"aN":"shoppingCart","cN":"UpdateQuantity","bhvr":91,"pid":"8X58XHDX57SX","sku":"F96R","itemCount":3}” id=”22bc22dd-ef9d-4d3c-8de9-1e7bc704f9f9_menuItem_3″ class=”ember-view”> 3
</a> </li>
<li role=”option”>
<a data-m=”{"aN":"shoppingCart","cN":"UpdateQuantity","bhvr":91,"pid":"8X58XHDX57SX","sku":"F96R","itemCount":4}” id=”22bc22dd-ef9d-4d3c-8de9-1e7bc704f9f9_menuItem_4″ class=”ember-view”> 4
</a> </li>
<li role=”option”>
<a data-m=”{"aN":"shoppingCart","cN":"UpdateQuantity","bhvr":91,"pid":"8X58XHDX57SX","sku":"F96R","itemCount":5}” id=”22bc22dd-ef9d-4d3c-8de9-1e7bc704f9f9_menuItem_5″ class=”ember-view x-hidden-focus”> 5
</a> </li>
</ul>
估计
Selecting a value from a drop-down option using selenium python – Stack Overflow
用xpath去选择,比较好。
如果不用option的value去选,倒是也可以考虑用index去选。
结果此处用:
cartNumOptionElemList = driver.find_elements_by_xpath(‘//ul[@class=”dropdown-menu”]/li[@role=”option”]’)
logging.info(“cartNumOptionElemList=%s”, cartNumOptionElemList)
carNumSelect = Select(cartNumOptionElemList)
carNumSelect.select_by_index(gCfg[“msStore”][“onceBuyNum”])
但是出错:
carNumSelect = Select(cartNumOptionElemList)
File “/usr/local/lib/python2.7/site-packages/selenium/webdriver/support/select.py”, line 36, in __init__
if webelement.tag_name.lower() != “select”:
AttributeError: ‘list’ object has no attribute ‘tag_name’
所以去改为:
直接用for循环就好了。
另外参考:
python – find_elements_by_partial_link_text won’t locate the elements – Stack Overflow
去试试之前就知道的:
Xpath中用contains/startWith
去实现,此处再次判断底层的tag中class/id等包含字符串/或者说 以字符串 开始
以便于更加精确的匹配:
具体写法,参考:
4. 查找元素 — Selenium-Python中文文档 2 documentation
starts-with [XPath 2.0 Reference @ Zvon.org]
contains [XPath 2.0 Reference @ Zvon.org]
更加精确的是:
matches [XPath 2.0 Reference @ Zvon.org]
结果:
【已解决】selenium.common.exceptions.ElementNotVisibleException Message element not visible
然后就可以获得对应列表元素,并点击了。
【总结】
代码:
<code>cartNumOptionElemList = driver.find_elements_by_xpath('//ul[@class="dropdown-menu"]/li[@role="option"]') </code>
对应网页:
点击了展开列表选项5之后效果:
转载请注明:在路上 » 【已解决】Selenium如何点击下拉框并选择某个值