如何解决如何悬停然后单击硒中的按钮?
我在网页中有以下html代码部分
<div class="action">
<div class="double-button">
<button class="widget-button" title="2 people liked this post">2</button>
<button class="widget-button like" title="like this post">
<svg class="fa d-icon d-icon-d-unliked svg-icon svg-node" aria-hidden="true">
<use xlink:href="#far-heart"></use>
</svg>
</button>
</div>
</div>
将鼠标悬停在第一个按钮上后,类名称将更改,代码将转换为
<div class="action">
<div class="double-button">
<button class="widget-button d-hover" title="2 people liked this post">2</button>
<button class="widget-button like" title="like this post">
<svg class="fa d-icon d-icon-d-unliked svg-icon svg-node" aria-hidden="true">
<use xlink:href="#far-heart"></use>
</svg>
</button>
</div>
</div>
点击第一个按钮后,将出现一个新的div,其中包含喜欢该帖子的人
<div class="action">
<div class="double-button">
<button class="widget-button d-hover" title="2 people liked this post">2</button>
<button class="widget-button like" title="like this post">
<svg class="fa d-icon d-icon-d-unliked svg-icon svg-node" aria-hidden="true">
<use xlink:href="#far-heart"></use>
</svg>
</button>
</div>
<div class="likes">
<a class="trigger-user" href="/USER1" name="USER1">USER1</a>
<a class="trigger-user" href="/USER2" name="USER2">USER2</a>
</div>
</div>
我的目标是选择所有使用selenium和python3的用户,因此我尝试了以下受其他堆栈溢出问题(如link1和link2)启发的代码
driver = webdriver.Chrome(executable_path='./chromedriver_83') #this works fine
driver.get("link_to_the_page") #also I get the link and all contents without problems
likes_button=driver.find_elements_by_xpath("//button[@class='widget-button']") # works fine too
print(likes_button[0].text) # This gives '2',it the right value
hover = ActionChains(driver).move_to_element(likes_button[0]) #select only the first element in the page for testing
hover.perform() # I think the hover does not work even if this is the right way
likes_button_hover=driver.find_elements_by_xpath("//button[@class='widget-button d-hover']") # now select the hovered button to be clicked,since I hovered only one button in the whole page the result shoud be one
print(len(likes_button_hover)) # this gives 0 while it should give 1
likes_button_hover[0].click() # this throw an error
我收到以下错误消息,这意味着按钮没有更改课程(悬停功能不起作用)
raise exception_class(message,screen,stacktrace)
selenium.common.exceptions.ElementClickInterceptedException: Message: element click intercepted: Element <button class="widget-button" title="2 people liked this post">2</button> is not clickable at point (537,17). Other element would receive the click: <span>...</span>
(Session info: chrome=83.0.4103.116)
我尝试使用多种方式进入第一个按钮
driver.find_elements_by_css_selector("[title*='people liked this post']")
但徒劳的是,我认为问题出在悬停上,但我看不出原因,当然我不能在没有悬停的情况下获取按钮并单击它。
我在做什么错了?
解决方法
我可以在这里看到两种解决方法。
1:作为按钮(您需要单击以查看所有用户的按钮)始终在那里,但只有类在更改。因此,您可以直接单击而无需将鼠标悬停在上面。
likes_button=driver.find_elements_by_xpath("//button[contains(@title,'people liked this post')]") # Used contains as number of people liked might change
print(likes_button[0].text) # This gives '2',it the right value
likes_button[0].click() # If not working try javaScript : driver.execute_script("arguments[0].click();",likes_button[0])
2:如果您真的想仅在悬停后单击,我想您可能需要使用pause
类的Actionchain
方法。由于Java脚本可能需要一些时间才能加载。对于您而言,它试图在鼠标悬停后立即查找类为widget-button d-hover
的按钮。
likes_button=driver.find_elements_by_xpath("//button[@class='widget-button']")
print(likes_button[0].text)
ActionChains(driver).move_to_element(likes_button[0]).pause(1).perform()
likes_button_hover=driver.find_elements_by_xpath("//button[@class='widget-button d-hover']")
print(len(likes_button_hover))
likes_button_hover[0].click()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。