我试图让selenium点击输入复选框但面临不同的错误。
这些复选框之间的唯一区别是data-filter-tag值,所以我尝试了这个。
driver.find_element_by_css_selector("input[data-filter-tag='am']").click()
错误
ElementNotVisibleException: Message: element not interactable
网页加载100%
HTML代码:
<ul>
<li class="filter-checkbox active-filter">
<div class="custom-checkbox" style="background-position: 0px center;"><input name="ctl00$ctl00$MainContentPlaceHolder$BaseContentPlaceHolder$pmainedge2edge4_0$ctl00$ctl14$rpFilters$ctl01$ctl00" type="checkbox" class="dealer-locator-filter" data-filter-tag="c"></div>
<span data-toggle="popover" data-placement="top" data-trigger="hover" data-content="" data-original-title="" title="">
Crown dealers
</span>
</li>
<li class="filter-checkbox active-filter">
<div class="custom-checkbox" style="background-position: 0px center;"><input name="ctl00$ctl00$MainContentPlaceHolder$BaseContentPlaceHolder$pmainedge2edge4_0$ctl00$ctl14$rpFilters$ctl02$ctl00" type="checkbox" class="dealer-locator-filter" data-filter-tag="r"></div>
<span data-toggle="popover" data-placement="top" data-trigger="hover" data-content="" data-original-title="" title="">
Authorized dealers
</span>
</li>
<li class="filter-checkbox active-filter">
<div class="custom-checkbox" style="background-position: 0px center;"><input name="ctl00$ctl00$MainContentPlaceHolder$BaseContentPlaceHolder$pmainedge2edge4_0$ctl00$ctl14$rpFilters$ctl03$ctl00" type="checkbox" class="dealer-locator-filter" data-filter-tag="cs"></div>
<span data-toggle="popover" data-placement="top" data-trigger="hover" data-content="" data-original-title="" title="">
Has service
</span>
</li>
<li class="filter-checkbox active-filter">
<div class="custom-checkbox" style="background-position: 0px center;"><input name="ctl00$ctl00$MainContentPlaceHolder$BaseContentPlaceHolder$pmainedge2edge4_0$ctl00$ctl14$rpFilters$ctl04$ctl00" type="checkbox" class="dealer-locator-filter" data-filter-tag="am"></div>
<span data-toggle="popover" data-placement="top" data-trigger="hover" data-content="" data-original-title="" title="">
Automower® dealers
</span>
</li>
</ul>
</div>
完整代码:
from selenium import webdriver
from time import sleep
driver = webdriver.Chrome('./chromedriver/chromedriver')
### website url
driver.get('https://www.husqvarna.com/us/')
sleep(6)
driver.find_element_by_css_selector("input[data-filter-tag='am']").click()
ElementNotVisibleException: Message: element not interactable
这个错误的意思呢,是元素找到了,但是未在页面展示出来。
按这思路。在之前加个time.sleep()即可。
如果你用这个相当讨厌的CSS选择器选中一个复选框的周围div,你至少可以点击一个没有例外的复选框。
checkbox = driver.find_element_by_css_selector("#MainContentPlaceHolder_BaseContentPlaceHolder_pmainedge2edge4_0_ctl00_ctl14_dealerFilters > section:nth-child(1) > div:nth-child(1) > div:nth-child(1) > ul:nth-child(1) > li:nth-child(4) > div:nth-child(1)")
checkbox.click()
有很多JavaScript干扰了webdriver自动化。我还没有找到更好的解决方案,但至少你知道有一种方法可以与该复选框进行交互。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。