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

先来讲述一下问题:

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

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

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

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

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

解决办法:

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

 先将目前版本删除:

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

pip install selenium==4.0

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

接着附上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()

效果:

 

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hares_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值