Python: 截屏
最近项目中想实现截屏功能,使用的笔记本是高清屏,实际屏幕设置成了150%,所以在截屏的时候遇到个各种问题。
最开始使用PIL ImageGrab来截取屏幕,如果本来是100%的设置没有问题,能截取到全屏,但是150%或者其他设置的就会有问题,只能截取到屏幕的左上部分,无法截取到全屏。
from PIL import ImageGrab pic = ImageGrab.grab()
# print(pic.size)
pic.save(r'C:\Users\test\Desktop\Automation\python\pic.jpg')
但是这个问题很奇怪,也有的机器150%设置,但是执行后没有问题。
遇到这个问题后看到网上有个解决方法:在注册表中Computer\HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers添加python.exe和pythonw.exe路径信息进去,再次执行程序就能截取到全屏,用python代码添加注册表的话,要重新再次运行程序才能截取到全屏:
from PIL import ImageGrab
import winreg reg = winreg.ConnectRegistry(None, winreg.HKEY_CURRENT_USER)
key = winreg.OpenKey(reg, r'Control Panel\Desktop\WindowMetrics')
# print(winreg.QueryValueEx(key, 'AppliedDPI'))
if winreg.QueryValueEx(key, 'AppliedDPI')[0] != 96:
key.Close()
key = winreg.OpenKey(reg, r'SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers', 0, winreg.KEY_ALL_ACCESS) winreg.SetValueEx(key, r'C:\Users\test\AppData\Local\Continuum\anaconda3\pythonw.exe', 0, winreg.REG_SZ, 'HIGHDPIAWARE')
winreg.SetValueEx(key, r'C:\Users\test\AppData\Local\Continuum\anaconda3\python.exe', 0, winreg.REG_SZ, 'HIGHDPIAWARE')
key.Close()
reg.Close() pic = ImageGrab.grab()
# print(pic.size)
pic.save(r'C:\Users\test\Desktop\Automation\python\pic.jpg')
考虑到以后会用到其他机器上,每次都需要执行2次才能截取到全屏,就弃用了此方法。
后来使用pyautogui来截取全屏,一般没有安装pyautogui,需要先安装:
pip install pyautogui
import pyautogui img = pyautogui.screenshot()
img.save(r'C:\Users\test\Desktop\Automation\python\pic_pyautogui.jpg')
但是如果笔记本还有连接外接显示器,是截取不到外显上内容的,只能截取笔记本显示器上的内容。如果要截取到外显上内容,想到使用win32方法来实现按键盘上的截屏功能,从而来实现抓取全屏带外显内容:
import win32api
import win32con
from PIL import ImageGrab win32api.keybd_event(win32con.VK_SNAPSHOT, 0)
im = ImageGrab.grabclipboard()
im.save(r'C:\Users\test\Desktop\Automation\python\pic_screenshot.jpg')
Python: 截屏的更多相关文章
- No.12 selenium for python 截屏
一.selenium for python 提供的几种截图方法 从上至下,很容易理解 1.as_file 获取当前window的截图,参数filename则表示截图的路径以及名称 出现IOError时 ...
- PhantomJS python 截屏
参考:https://www.cnblogs.com/LanTianYou/p/5578621.html # coding:utf8 from time import sleep from selen ...
- python 截屏操作
方法1: 用pyscreenshot,https://pypi.org/project/pyscreenshot/ 方法2:用autopy,https://pypi.org/project/autop ...
- 使用Python中PIL图形库进行截屏
目的:通过使用Python的一个图形库PIL(Python Image Library)对屏幕进行截图 步骤: 1.下载PIL(路径)并安装 2.新建文件“截屏.py”,右键Edit with IDL ...
- Python 实现网页截屏、查库、发邮件
本文介绍了使用 Python(2.7版本)实现网页截屏.查库.发邮件的 demo.用到了 selenium.phantomjs.mailer.jinja2.mysqldb 还有 image,都是比较典 ...
- 简单易用的PIL,教你如何使用python实现自动化截屏
Python有个第三方模块叫做PIL是Python Imaging Library的缩写,是用来进行图像处理的,比如,改变图片颜色,图片缩放,图片裁剪等等基本图片操作.它还包含一个截屏的功能. 从以上 ...
- python 调用麦克风;摄像头;截屏;
# -*- coding: utf-8 -*- """ Created on Mon Jun 24 14:47:35 2019 @author: erio "& ...
- PhantomJS linux系统下安装步骤及使用方法(网页截屏功能)
PhantomJS 是一个基于 WebKit 的服务器端 JavaScript API.它全面支持web而不需浏览器支持,其快速,原生支持各种Web标准: DOM 处理, CSS 选择器, JSON, ...
- robotFramework——截屏
测试执行过程中进行截屏并且保存,是任何一款自动化测试工具或者框架必备的功能.那么Robotframework如何进行截屏呢?Robotframework提供了一个“Screenshot”库. 使 ...
随机推荐
- Java内存模型。
Java内存模型: 准备知识:缓存,缓存一致性,硬件缓冲区:写缓冲区.无效化队列,内存重排序,内存屏障. 1.Java内存模型概念. 首先,在并发的情况下,计算机系统必须解决这样两个问题:第一,一个处 ...
- day 35
目录 单表操作 分组 group by having order by limit 使用顺序 多表操作 外键 一对多 多对多 一对一 多表联查 单表操作 分组 group by 分组指的是:将所有记录 ...
- SpringBoot的学习二:整合Redis,JPA,Mybatis
Redis介绍: 是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API 特性: Redis 与其他 key - value 缓 ...
- 004-OpenStack-计算服务
OpenStack-计算服务 [基于此文章的环境]点我快速打开文章 1.控制节点(controller) 1.1 创库授权 nova_api, nova, 和 nova_cell0 mysql CR ...
- 五、select的5种子句
1.Where 条件查询 比较运算符: 运算符 说明 > < = >= <= !=或<> In 在某集合内 between 在某范围内 In ...
- POJ 1321 棋盘问题 题解
棋盘问题 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 70224 Accepted: 33254 Description 在一 ...
- true false
#include<stdio.h> int main(void) { /* true 1 false 0 */ printf( == ); printf( > ); printf( ...
- JS三座大山再学习 ---- 作用域和闭包
本文已发布在西瓜君的个人博客,原文传送门 作用域 JS中有两种作用域:全局作用域|局部作用域 栗子1 console.log(name); //undefined var name = '波妞'; v ...
- XML 配置文件,知识点
namespace 属性:配置成接口的全限定名称,将 Mapper 接口和 XML 文件关联起来: select 标签的 id 属性值,对应定义的接口方法名. insert 标签的属性 paramet ...
- 2020年数据库概念与MySQL的安装与配置-从零基础入门MySQL-mysql8版本
作者 | Jeskson 来源 | 达达前端小酒馆 从零基础入门MySQL数据库基础课 数据的概念,简介,安装与配置,Windows平台下MySQL的安装与配置. 数据库的概念:数据库是一个用来存放数 ...