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

2020-04-16 19:55:48 +08:00
 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')

3131 次点击
所在节点    Python
12 条回复
ClericPy
2020-04-16 20:00:06 +08:00
留个网址? 我试试我直接原生 cdp 截图准不准

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

我前面说的 scale 参数就是页面缩放的问题, 你要么把 scale 改为 1, 要么就通过 selenium 或者 js 拿到当前缩放 scale 值, 在截图时候传入正确的就可以了
littlepython
2020-04-17 11:05:48 +08:00
@ClericPy 好的 我试试
fzhyzamt
2020-04-17 11:18:41 +08:00
Mac 下试了一下是正常的,可能确实是缩放的原因
JohnTao
2020-04-21 20:47:22 +08:00
用 xpath 定位

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

https://www.v2ex.com/t/663193

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

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

© 2021 V2EX