如何在Python中仅使用Selenium长按(按住)鼠标左键 [英] How to long press (Press and Hold) mouse left key using only Selenium in Python

查看:22
本文介绍了如何在Python中仅使用Selenium长按(按住)鼠标左键的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用Python中的Selenium从沃尔玛站点收集一些评论数据,但是它将这个site连接起来以供人工验证。检查了这个‘按住’按钮后,不知何故,当我找到该元素时,它显示为[对象HTMLIFrameElement],而不是Web元素。并且元素随机出现在10个IFRAME中的任何IFRAME内。可以使用循环进行检查,但是,如果没有web元素,我们最终无法在Selenium中执行任何操作。

虽然此验证也是以弹出方式进行的,但我首先尝试为此页面解决此问题。不知何故,我使用div定位了这个按钮的位置。

actions = ActionChains(driver)
iframe = driver.find_element_by_xpath("//div[@id='px-captcha']")
frame_x = iframe.location['x']
frame_y = iframe.location['y']
actions.move_to_element(iframe).move_by_offset(frame_x-550, frame_y+70).build().perform()
如果我执行context.click()或右键单击,可以看到鼠标位置在按钮的中间。

现在,如果我可以执行长按按住鼠标左键一段时间,我想可以清除此验证。为此,我尝试使用click()click_and_hold以及key_down中的key_down方法(因为按Ctrl和Enter的作用与长按相同)来执行操作,但这些方法松开按钮时没有响应,不能长按。我试过

actions.move_to_element(iframe).move_by_offset(frame_x-550,frame_y+70).click_and_hold().pause(20).perform()
actions.move_to_element(iframe).move_by_offset(frame_x-550, frame_y+70).actions.key_down(Keys.CONTROL).actions.key_down(Keys.ENTER).pause(20).perform()

.还有这么多方法!我怎么用硒解决

推荐答案

这是我的临时解决方案。关键是10秒后释放,然后再次单击。这就是我如何欺骗验证码,使其认为我持有验证码的时间刚刚是正确的(在我的实验中,验证码的按住时间是随机的,10秒可以确保有足够的时间完全完成验证码)。

element = driver.find_element_by_css_selector('#px-captcha')
action = ActionChains(driver)
click = ActionChains(driver)
action.click_and_hold(element)
action.perform()
time.sleep(10)
action.release(element)
action.perform()
time.sleep(0.2)
action.release(element)

这篇关于如何在Python中仅使用Selenium长按(按住)鼠标左键的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆