首页 > 解决方案 > 如何在Python中仅使用Selenium长按(按住)鼠标左键

问题描述

我正在尝试使用 Python 中的 Selenium 从沃尔玛网站上抓取一些评论数据,但它连接了该网站以进行人工验证。在检查了这个“ Press & Hold ”按钮后,不知何故,当我找到该元素时,它以 [ object HTMLIFrameElement ] 的形式出现,而不是作为 web 元素。并且该元素随机出现在任何 iframe 中,在 10 个 iframe 中。可以使用循环检查它,但最终我们无法在没有 web 元素的情况下在 selenium 中执行任何操作。

尽管此验证也以弹出窗口的形式出现,但我试图先为此页面解决它。div不知何故,我使用作为 web 元素定位了这个按钮的位置。

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()andclick_and_hold和 in 中的key_down方法(因为按 ctrl 和 enter 与长按相同)采取行动action,但没有响应,因为这些方法释放按钮,不能长按。我试过了

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()

......还有很多方法!如何使用 Selenium 解决它

标签: python-3.xseleniumiframemouseeventcaptcha

解决方案


这是我的临时解决方案。关键是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)

推荐阅读