Win10下用selenium、Image.crop() 截图时、坐标不准确的问题
截百度按钮的图
先将整个窗口的图保存下来
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('https://www.baidu.com/')
element = driver.find_element_by_xpath('//input[@id="su"]')
# 坐标
print(element.location)
# 大小
print(element.size)
# 把当前窗口截图保存
driver.get_screenshot_as_file('1.png')
正常情况下,直接根据图片的坐标和大小,将对应参数给到crop()
from PIL import Image
image = Image.open('1.png')
x = 738
y = 220
im = image.crop((x, y, x + 100, y + 36))
im.show()
结果却是这样?
看这内容,只截到“度”字,距离目标还有这么长一截
原因是自己电脑缩放与布局(桌面右键、显示设置)用的125%为推荐设置
方法一:把这个设置调回100%即可准确截图
方法二:在给crop()参数的时候,全部乘以对应的比列也能准确截图
from PIL import Image
image = Image.open('1.png')
x = 738 * 1.25
y = 220 * 1.25
im = image.crop((x, y, x + 100 * 1.25, y + 36 * 1.25))
im.show()
方法三:执行js,对页面进行缩放
- document.body.style.zoom="1.5"
import time
from io import BytesIO
from PIL import Image
from selenium import webdriver
driver = webdriver.Chrome()
try:
driver.get('https://www.baidu.com/')
# 执行js,对页面进行缩放,100 占 125 的 80%
driver.execute_script('document.body.style.zoom="0.8"')
# 要截图的元素
element = driver.find_element_by_xpath('//input[@id="su"]')
# 坐标
x, y = element.location.values()
# 宽高
h, w = element.size.values()
# 把截图以二进制形式的数据返回
image_data = driver.get_screenshot_as_png()
# 以新图片打开返回的数据
screenshot = Image.open(BytesIO(image_data))
# 对截图进行裁剪
result = screenshot.crop((x, y, x + w, y + h))
# 显示图片
result.show()
finally:
time.sleep(10)
driver.quit()
Win10下用selenium、Image.crop() 截图时、坐标不准确的问题的更多相关文章
- win10下安装Ubuntu后,启动时没有win10选项解决方法
通过在ubuntu里修改启动引导,解决. 1.进入Ubuntu系统,Ctrl+alt+t进入终端,输入以下命令即可 sudo gedit /etc/default/grub 2.在打开的gedit编辑 ...
- vs2017 在win10下安装后开始运行asp.net core 项目时出错
vs2017 在win10下安装后开始运行asp.net core 项目时出错 报找不到什么 解决方法: 下载 asp.net 2.2 安装好,重新启动电脑问题解决.
- WIN10下安装python3.7.2出现“尝试创建C:\Users\XX\AppData\Roaming\Microsoft\Installer时出错”
WIN10下安装python3.7.2出现"尝试创建C:\Users\XX\AppData\Roaming\Microsoft\Installer时出错" 1.右键点击安装包以管理 ...
- win10下使用nodejs安装及webstorm创建express项目的指导
title: win10下使用nodejs安装 win10下使用nodejs安装及webstorm创建express项目的指导 windows下nvm的安装 熟悉linux下nodejs开发的朋友应该 ...
- win10下安装ubuntu18.04
在win10下安装Ubuntu18.04,双系统共存.Ubuntu 18.04 使用的是Gnome桌面. 查看系统的启动模式: Win+R打开运行,输入msinfo32,回车查看系统信息.在BIOS模 ...
- 【Android】7.7 以后改为在Win10下开发了
分类:C#.Android.VS2015: 创建日期:2016-02-12 修改日期:2016-02-13 一.鼠标点击时千万别一心二用 在Win10升级提醒不厌其烦的持续轰炸下,今天看手机时一不留神 ...
- 在win10下安装双系统ubuntu16.04.3教程
闲暇了两天,终于想起来要装一个Liunx系统了.于是捣鼓了一番,实现了在Win10下安装Ubuntu16.04.3版本. 一.准备工作 下载Ubuntu 16.04.3镜像 准备一个2G以上的U盘 下 ...
- Win10下数据增强及标注工具安装
Win10下数据增强及标注工具安装 一. 数据增强利器—Augmentor 1.安装 只需在控制台输入:pip install Augmentor 2.简介 Augmentor是用于图像增强的软件 ...
- Win7/Win8/Win8.1/Win10下的DragEnter DragDrop事件不触发
Win7/Win8/Win8.1/Win10下的DragDrop事件不触发 2011-02-02 来自:博客园 字体大小:[大 中 小] 摘要:你的应用程序需要从windows资源管理器拖动文件到 ...
随机推荐
- C语言中的指针与数组的定义与使用
指针的特点 他就是内存中的一个地址 指针本身运算 指针所指向的内容是可以操作的 操作系统是如何管理内存的 栈空间 4M~8m的大小 当进入函数的时候会进行压栈数据 堆空间 4g的大小 1g是操作系统 ...
- 笔记||Pyhthon3进阶之多线程操作共享数据
# 多线程操作共享数据--------------------------------------------------------------- # import threading# 使用锁# ...
- MySQL定时任务event,储存过程(定时删除指定时间前90天指定表的数据)
MySQL定时任务event,储存过程(定时删除指定时间前90天指定表的数据) 分类: MySql5.x2014-06-23 15:16 1266人阅读 评论(0) 收藏 举报 mysql数据库 &l ...
- 银行输入密码五次次数限制python程序实现
python银行输入密码五次次数限制程序实现,主要在于对于异常情况的处理语句的编写,需要使用while循环语句和try和except异常处理语句的复合编写语句n=0while n<5: try: ...
- 全球定位IP位置 2018(离线版)
球定位IP位置 2018(离线版) 这次写的软件使用Python写的,所以体积可能有点大 我特地写了GUI打包成了Exe可执行文件,方便小白使用== 只要输入目标ip就能显示目标所在的国家城市和经纬度 ...
- 如何使用Python输出一个[斐波那契数列]
如何使用Python输出一个[斐波那契数列]Fibonacci 斐波那契数列(Fibonacci sequence),又称黄金分割数列.因数学家列昂纳多·斐波那契(Leonardoda Fibonac ...
- SpringBoot 静态资源的配置
springboot默认的静态资源目录: classpath:/static classpath:/public classpath:/resources classpath:/META-INF/re ...
- rapid-generator JAVA代码生成器
有感于马上要做个比较大的业务系统,想到那无止境的增删改查.粘贴复制,顿时脑后升起一阵凉风.于是想到个找或者写一个Java代码的生成器,这样在正常开发进度下,也能余下更多的时间去做些别的事情. 闲话少说 ...
- spring中的@Transactional注解
前几天灿哥问我,在做程序的时候,有没有考虑到事务,如果一个函数在中间执行过程中报错了,它会回滚么?我查了一查,spring确实有这样一个注解,能快速帮助我们配置事务管理.下面我就简单介绍一下这个注解. ...
- Censoring「USACO 2015 Feb」
题目描述 有一个S串和一个T串,长度均小于1,000,000,设当前串为U串,然后从前往后枚举S串一个字符一个字符往U串里添加,若U串后缀为T,则去掉这个后缀继续流程. 输入格式 包含两行,第一行为S ...