验证码对抗 - 解决 PIL.Image 库 crop 函数截取图片不准确的问题

目录

# 1. 描述

# 2. 原因

# 3. 解决

# 4. 效果


# 1. 描述

在进行 bilibili 点触验证码对抗的时候,需要在元素返回位置之后,对整个截屏的该指定位置进行截取,然而在正确获取图片或者模块在页面得位置之后截取的图片完全偏离,如下图所示,本篇文章旨在解决这个问题

验证码对抗 - 解决 PIL.Image 库 crop 函数截取图片不准确的问题

截取后:

验证码对抗 - 解决 PIL.Image 库 crop 函数截取图片不准确的问题


# 2. 原因

webdriver.get_screenshot_as_png() 是针对 selenium 显示的进行的,而 element.position 和 element.size 是固定的,即分辨率为 100% 时的 position 和 size,而我们电脑的分辨率往往会设置为推荐的 125% 或 150%,即对屏幕截图进行指定位置截取的时候,截得是 100% 时的位置,如图展示了我的电脑 windows 的分辨率设置(快捷键:win + i - 显示

验证码对抗 - 解决 PIL.Image 库 crop 函数截取图片不准确的问题


# 3. 解决

方案一:电脑分辨率调至 100%,再运行程序

方案二:driver.execute_script 方法,执行 JavaScript 的 zoom 命令(放缩)

browser.execute_script('document.body.style.zoom="0.667"')

⚡  这里的 0.667,是从 150% 到 100% ,即 * 2/3,若是125%的分辨率则应该是 0.8


# 4. 效果

验证码对抗 - 解决 PIL.Image 库 crop 函数截取图片不准确的问题

上一篇:泽泥克变换 Zernike


下一篇:径向渐变实现舞台灯光聚焦效果