【 Python 爬虫】selenium点击验证码,处理不同分辨率的点击不准问题

from selenium.webdriver.common.action_chains import ActionChains
from selenium import webdriver
from PIL import Image

web = webdriver.Chrome(executable_path=r"./chromedriver")
web.get("URLS")

# 设置成的最低支持的分辨率  这个看自己的显示器分辨率
web.set_window_size(width=1920, height=1080)

# 截屏整个页面 
web.save_screenshot("./page.png")

# 整个页面里面截验证码的图
im = Image.open('./page.png')

# 截取图的验证码图片  一定要用图片的分辨率(你可以使用美图秀秀、PS来获取坐标定位)
x, y, t, b = [1579, 189, 2233, 634]
iim = im.crop((x,y,t,b))
im.save("./code.png") # 保存

# 识别验证码
chaojiying = CodeBeat('USERNAME', 'PASSWORD', '96001')
im = open("./code.png", 'rb').read()
code_json = chaojiying.PostPic(im, 9101)
if code_json.get('err_no') == 0:
    rx, ry = code_json.get('pic_str').split(",") # 返回的是坐标位置
      # 这里的这个2  就是点击坐标的关键点  有时候会点击不到我们想要的位置 具体往下看
    x_move = int((int(rx) + x) / 2)    # X要移动的位置   
    y_move = int((int(ry) + y) / 2)    # Y要移动的位置   
    print(x_move,y_move)
    
    # 进行重置坐标
    ActionChains(web).reset_actions()
    ActionChains(web).move_by_offset(x_move, y_move).click().perform() # 移动到对应验证码进行点击
# 记住一点: 截取验证码的图片用PS/美图秀秀确定位置,   点击坐标使用显示器的分辨率进行确定位置

## 以下是测试代码: 你可以直接复制过去进行测试坐标的除数 也就是上面的2那个参数
web = webdriver.Chrome(executable_path=r"./chromedriver.exe")
web.get("https://www.baidu.com/")
web.set_window_size(width=1920, height=1080)
web.save_screenshot("./page.png")
ActionChains(web).reset_actions()
ActionChains(web).move_by_offset(664, 300).click().perform()  # 百度热搜位置      1332  600
print("点击完成")
time.sleep(11111)PS:    在我的笔记本分辨率里     PS测试出按钮的坐标是1332,600   桌面分辨率测出按钮的坐标是 664,300  所以这个参数应该是  1332 /  664 = 2    总结:  美图秀秀/PS测试出按钮的坐标    /     桌面分辨率测试出的坐标  =  实际移动的鼠标分辨率
posted @ 2022-07-20 15:05  PythonNew_Mr.Wang  Views(676)  Comments(0)    收藏  举报