python-3.x - 如何在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 解决它?
解决方案
这是我的临时解决方案。关键是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)
推荐阅读
- ios - 使用 RxSwift 链接登录操作
- vuejs2 - Vue js 动态组件嵌套
- docker - 在 Docker 容器中部署 Spring Boot 应用程序而不自动启动 Tomcat
- c# - SQL Server 更新数据库的列名无效
- cocoa - NSMatrix 的 NSUserDefaults
- apache-flink - 为什么在使用 ProcessingTime 时,只有在我输入第二个事件后,CEP 才打印第一个事件?
- batch-file - 如何将一个文本文件传输到另一个文件?
- database - Windows 窗体保存到数据集但不保存到表
- sql-server - 如何在 SQL Server 2016 中设计版本控制表
- javascript - 如何停止从 div 的 ID 重定向到父 URL