selenium 4.3.3鼠标定位move_to_element_with_offset定位问题,超级鹰解决文字点击验证码

这篇具有很好参考价值的文章主要介绍了selenium 4.3.3鼠标定位move_to_element_with_offset定位问题,超级鹰解决文字点击验证码。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

先来讲述一下问题:

今天遇到了在爬虫时候使用超级鹰触控点击图片二维码的时候点击错位,位置不正确,经过不断尝试还是不行,最终找到解决办法

因为不解所以特意查阅了一下官方文档的介绍:

move_to_element_with_offset,Python,爬虫,selenium,python,测试工具

 文档写着:基于左上角的方位坐标

原本我的selenium版本4.4.3在点击事件时候发现总是错误,要么不见了,要么点击不正确,如图情况

move_to_element_with_offset,Python,爬虫,selenium,python,测试工具

经过测试发现4.4.3的版本此功能是基于中间的,但具体是为什么我也不知道,变动了什么没有深入去理会,毕竟官方文档写着是基于左上角

解决办法:

最终还是没能查阅新版本的使用方法,只能尝试降版本看看,最终解决

 先将目前版本删除:

move_to_element_with_offset,Python,爬虫,selenium,python,测试工具

点击终端输入以下安装命令:

move_to_element_with_offset,Python,爬虫,selenium,python,测试工具

pip install selenium==4.0

接着就能恢复左上角为基准

move_to_element_with_offset,Python,爬虫,selenium,python,测试工具

接着附上b站处理验证码登录代码:

代码:

import io
import time
from PIL import Image
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By
from chaojiying_Python.chaojiying import Chaojiying_Client


#创建驱动
def create_chrome_driver(*,headless = False):
    options = webdriver.ChromeOptions()
    if headless:
        options.add_argument('--headless')
#伪装模拟器反爬去
    options.add_experimental_option("excludeSwitches",['enable-automation'])
    options.add_experimental_option("useAutomationExtension",False)
    driver = webdriver.Chrome(options=options)
    with open('./stealth.min.js') as f:
        js = f.read()
    driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
        "source": js
    })

    # driver.execute_cdp_cmd(
    #     'Page.addScripToEvaluateOnNewDocument',
    #     {'source':'Object.defineProperty(navigator,"webdriver",{get:() => undefined})'}
    # )
    return driver

driver = create_chrome_driver()
driver.get('https://www.bilibili.com/')
driver.implicitly_wait(5)
time.sleep(1)#预留时间以防过快导致定位不到
driver.find_element(By.CLASS_NAME,"header-login-entry").click()#点击登录
# iframe = driver.find_element(By.TAG_NAME,"iframe")
# driver.switch_to.frame(iframe)            #发现不需要切入iframe
driver.find_element(By.CLASS_NAME,"bili-mini-tab-message").click()  #点击手机号形式登录
time.sleep(1)
driver.find_element(By.CLASS_NAME,'tel-input').send_keys("18802222345") #传入手机号
driver.find_element(By.CLASS_NAME,'text').click()   #点击获取验证码
time.sleep(1)
auth = driver.find_element(By.XPATH,'/html/body/div[4]/div[2]/div[6]')#定位验证码位置
location, size = auth.location, auth.size   #获取定位和大小
print(location, size)
width, height = size['width'], size['height']-46    #减去底部
left, top, right, bottom = location['x'], location['y'], location['x'] + width, location['y'] + height
full_image = driver.get_screenshot_as_png() #截图验证码图片
image = Image.open(io.BytesIO(full_image))  #二进制可读写方式不保存文件形式
image.save("a.png")  #保存来测试位置是否正确
images = image.crop((left*2, top*2, right*2, bottom*2)) #*2是因为mac系统
images.thumbnail((width,height))    #生成缩略图,同时因为mac系统大所以有时候需要,超级鹰有限制所以需要
#将图片保存为io可读写字节串形式   ---》最终以getvalue()去传入
buffer = io.BytesIO()
images.save(buffer,format='png')
images.show()

chaojiying = Chaojiying_Client('账号', '密码', 'ID')	#用户中心>>软件ID 生成一个替换 96001												#本地图片文件路径 来替换 a.jpg 有时WIN系统须要//
location_click = chaojiying.PostPic(buffer.getvalue(), '9004')
print(location_click)
print(location_click['err_no'])
if location_click['err_no'] ==0:
    ac = ActionChains(driver)
    pic_str = location_click['pic_str']
    pic = pic_str.split('|')
    for loca_ac in pic:
        x,y = map(int,loca_ac.split(','))
        print(x,y)
        ac.move_to_element_with_offset(auth,x,y).click()
        time.sleep(0.5)
    ac.perform()

else:
    print("处理失败")

time.sleep(5)
driver.close()

效果:

move_to_element_with_offset,Python,爬虫,selenium,python,测试工具

 move_to_element_with_offset,Python,爬虫,selenium,python,测试工具文章来源地址https://www.toymoban.com/news/detail-661179.html

到了这里,关于selenium 4.3.3鼠标定位move_to_element_with_offset定位问题,超级鹰解决文字点击验证码的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • python selenium 定位鼠标悬浮后的新弹窗数据

            最近需要获取网页上的标签数据,但是标签大于3个以后是隐藏的,需要鼠标hover上去才显示。如下图,图一是刚进来界面展示的,需要知道额外的7个标签则需要将鼠标移动到目标上面去。            但是比较尴尬的一个点是,当游览器打开F12后,使用鼠标去选中关

    2024年02月06日
    浏览(45)
  • pyautogui 配合 selenium 实现桌面坐标系定位元素坐标,模拟真实鼠标行为

    pyautogui 配合 selenium 实现桌面坐标系定位元素坐标,模拟真实鼠标行为。 场景:当我需要点击某个元素,或者触发浏览器的自动填充账号密码时,自动化点击无效。但是想要模拟真实鼠标点击又需要元素的坐标通过pyautogui来实现。通过selenium node.location获取的坐标是相当于浏览

    2024年02月13日
    浏览(43)
  • python之selenium库安装及用法(定位法、获取文本、文本框输入、鼠标点击、滑动滚动条)

    谷歌浏览器驱动下载地址:https://chromedriver.storage.googleapis.com/index.html 根据你电脑的谷歌浏览器版本,下载相应的就行。我下载的是110.0.5481.XX中的chromedriver_win32.zip 下载完成,解压将里面的chromedriver.exe放到你python安装路径的scripts文件夹中。 能打开百度网页说明安装成功 (一

    2023年04月27日
    浏览(53)
  • web自动化系列-selenium find_elements定位方法详解(八)

    接上文 : web自动化测试系列-selenium css_selector定位方法详解(七)-CSDN博客 前面已经介绍了8种定位方法 ,大多数情况下我们都会优先使用这8种方法 。 但有的时候在你选择定位元素时 ,会出现多个同样的定位属性和值 。而且你能选择定位也就这一种情况 。这种情况你只能使用

    2024年04月16日
    浏览(39)
  • 解决selenium定位不到xpath元素: “NoSuchElementException: Message: no such element: Unable

    在使用selenium爬取的时候用xpath定位元素,最常见的报错就是这个,通常要么是xpath写错了,要么就是元素还没加载出来。 如果是前者可以用谷歌浏览器的xpath helper插件检查xpath是否正确,后者可以增加等待时间或使用以下语句等到元素可见再执行后续操作: 这次我遇到的问题

    2024年02月16日
    浏览(41)
  • Python爬虫(1)一次性搞定Selenium(新版)8种find_element元素定位方式

    selenium中有8种不错的元素定位方式,每个方式和应用场景都不一样,需要根据自己的使用情况来进行修改 目前selenium已经出现了新的版本的定位方式,虽然说定位语法不一样,但是万变不离其宗。 用旧版的定位语法就会出现这个删除线,你用他来进行爬虫的时候运行时就会提

    2024年02月03日
    浏览(62)
  • selenium报错Unable to locate element

    背景: 使用selenium写自动化脚本时,在登录后的新界面进行点击一直报错 内容如下: 报错如下: 解决方案: 查找各方资料后,有几种情况会造成报错,以下为解决方案: 1、定位的页面重新开了一个iframe,需要切换iframe,语句如下: 或者如下语句: 或者如下语句: 2、时间

    2023年04月09日
    浏览(42)
  • Selenium页面跳转后的元素定位-switch_to.window()使用

    在使用Selenium获取网页数据时常常会因为页面跳转导致,后续的页面数据无法正常获取。究极原因,都是因为此时的页面对象还是上一个页面,使用当前页面的定位条件当然会报错(因为上一个页面根本不存在这些定位条件)。因此我们可以通过switch_to.window()进行页面的切换

    2023年04月09日
    浏览(47)
  • Message: no such element: Unable to locate element:selenium报错

           最近在使用selenium爬虫时遇到了这个报错,反复检查了自己xpath路径确认没有问题。但是程序还是会报错:“Message: no such element: Unable to locate element: {“method”:“xpath”,“selector”:“//*[@id=“rootWrapper”]/div/div/div/div[2]/div/div[2]/div/div/div/div[2]/div[2]/ul/li[1]”}”。 代码如

    2024年02月11日
    浏览(36)
  • selenium定位元素报错:‘WebDriver‘ object has no attribute ‘find_element_by_id‘

    Selenium更新到 4.x版本后,以前的一些常用的代码的语法发生了改变 目标:希望通过 selenium 模拟在 “百度” 上 输入搜索 思路:通过对网页的源代码分析(进入www.baidu.com,右键并检查则可看其HTML源代码),定位到搜索框的属性id=“kw” 报错: 报错原因: selenium 更新到

    2024年02月20日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包