python3 使用 selenium 截屏后再截取指定坐标图片定位不准确是为什么

2020 年 4 月 16 日
 littlepython

想截取一下验证码的图片,但是截图后和验证码的位置不对应,不知道是不是写法有问题,还是有其余的因素在影响,selenium 用的 Chrome 浏览器 附上操作代码 browser.save_screenshot('bdbutton.png') element = browser.find_element_by_xpath('//*[@id="login-yzm_img"]') # 找到验证码图片 print(element.location) # 打印元素坐标 print(element.size) # 打印元素大小 left = element.location['x'] top = element.location['y'] right = element.location['x'] + element.size['width'] bottom = element.location['y'] + element.size['height']

im = Image.open('bdbutton.png') im = im.crop((left, top, right, bottom)) im.show() im.save('bdbutton.png')

3960 次点击
所在节点    Python
12 条回复
ClericPy
2020 年 4 月 16 日
留个网址? 我试试我直接原生 cdp 截图准不准

如果盲猜的话, 怀疑和截图参数 scale 有关, 但是不确定 selenium 走的是 driver 内置的截图还是也同样走了 cdp
littlepython
2020 年 4 月 16 日
@ClericPy 就芒果 tv 短信登录的那儿的验证码截图
ClericPy
2020 年 4 月 16 日
unixeno
2020 年 4 月 16 日
你系统开缩放了?
dudu2017
2020 年 4 月 16 日
指定一个窗口大小试试。
littlepython
2020 年 4 月 17 日
@ClericPy 老哥 你这段代码我在 windows 运行直接报错,我是有什么没设置吗
littlepython
2020 年 4 月 17 日
@unixeno 系统的推荐是 200%, 把坐标改成 2 就好了,就是不知道怎么能通用
littlepython
2020 年 4 月 17 日
@dudu2017 和系统的缩放有关 不知道怎么设置一个通用的
ClericPy
2020 年 4 月 17 日
@littlepython #6 代码就是随手发的, 因为我没用 selenium, 走的是默认的 Chrome cdp, 可以忽略

我前面说的 scale 参数就是页面缩放的问题, 你要么把 scale 改为 1, 要么就通过 selenium 或者 js 拿到当前缩放 scale 值, 在截图时候传入正确的就可以了
littlepython
2020 年 4 月 17 日
@ClericPy 好的 我试试
fzhyzamt
2020 年 4 月 17 日
Mac 下试了一下是正常的,可能确实是缩放的原因
JohnTao
2020 年 4 月 21 日
用 xpath 定位

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://study.congcong.us/t/663193

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX