我想用python截取屏幕截图.
我尝试过使用PIL,但由于我使用的是64位窗口,而python PIL不起作用(我只能找到32位PIL版本).我顺便使用python 2.7.1.
我想拍一个截图,它并不重要,只要速度每秒可以超过1秒.优选地,它还应该能够裁剪截屏的区域,但这并不是最重要的.
主要问题似乎是我在64位上运行,很多东西似乎与之不相容.如果可能的话,我真的不想回到32位.有没有可以做到这一点的程序或模块?
使用python 3,我想获得另一个窗口(不是我的应用程序的一部分)的句柄,这样我可以:
a)直接捕获该窗口作为截图或
b)确定其位置和大小并以其他方式捕获它
如果它很重要,我使用的是Windows XP(编辑:也适用于Windows 7).
我找到了这个解决方案,但它不是我需要的,因为它是全屏的,更重要的是,据我所知,PIL还不支持3.x.
我试图了解如何在 Python 2.7 中使用 PIL 在整个屏幕上搜索某个图像并单击它。我一直在四处寻找,但无法找到解决方案。我想创建一个中间有一个按钮的小 GUI,单击该按钮时将在整个屏幕上搜索预定义的图像。找到图像后,程序将单击它的中心并结束。简而言之,程序将检测用户屏幕上是否存在图像并单击它。
我确实在 Sikuli 上发现了一个有趣的地方,但这对我没有帮助,因为它无法导出到 .exe。
程序每次搜索时将查找的图像很可能在同一个位置,但我不想对该位置进行硬编码,因为它有可能移动,我不希望这是一个问题稍后的。
我需要的是用于在屏幕上搜索图像并将电线发回变量的代码方法。
图片说明/示例:
步枪参考图:
A PIL.Image.grab()
大约需要0.5秒.这只是为了从屏幕上获取数据到我的应用程序,而我没有任何处理.另一方面,FRAPS可以截取高达30 FPS的屏幕截图.我有什么方法可以从Python程序中做同样的事情吗?如果没有,C程序怎么样?(我可以使用Python程序与它接口,可能...)
我的目标是制作一个小巧的PC / Windows程序,使我可以从字面上画在屏幕顶部,并将结果另存为具有透明背景的png。像Epic Pen或gInk之类的软件一样,但是我的方式。全部使用Python 3.7和PyQt5。
到目前为止,由于我同时在学习PyQt,因此我设法获得了一个功能绘图应用程序(基本上遵循本教程)。我设法将草稿另存为具有透明背景的png。我可以使绘图板全屏且无边框。
现在的问题是,我找不到使整个背景透明的方法。尽管我找到了使用这些方法使窗口透明和无边界的方法:
Window = Window()
Window.setStyleSheet("background:transparent;")
Window.setAttribute(Qt.WA_TranslucentBackground)
Window.setWindowFlags(Qt.FramelessWindowHint)
Window.show()
Run Code Online (Sandbox Code Playgroud)
而且有效...直到我有了绘图区域。我可以在其上绘制,它将以透明背景保存,但显示为黑色。
因此,我正在寻找该解决方案。即使没有PyQt,只要我可以使程序正常运行,我也不在乎。
因此,这就是我所拥有的(我为您展示了带有框架的窗口,以便于解释):
这是我的代码:
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QMenuBar, QMenu, QAction, QShortcut, QFileDialog
from PyQt5.QtGui import QIcon, QImage, QPainter, QPen
from PyQt5.QtCore import Qt, QPoint
class Window(QMainWindow):
def __init__(self):
super().__init__()
top = 400
left = 400
width = 800
height = 600
icon = "icons/icon.png"
self.setWindowTitle("ScreenPen drawing board")
self.setGeometry(top, left, width, height)
self.setWindowIcon(QIcon(icon))
# ---------- sets …
Run Code Online (Sandbox Code Playgroud) 我正在使用PyQt(作为Python初学者).我需要能够在无头系统上截取网站的屏幕截图.我之前使用的是PhantomJS用于另一个项目,但他们在1.5中删除了Flash支持,我不想依赖于我的新项目弃用的1.4版本.
所以我正在使用PyQt自己做我的东西.我可以用一个给定的网址截取一个网站的截图,没问题.
但我一直在Flash占位符上有"蓝色骰子"flash插件图标(是的,javascript和插件被激活)
self.settings.setAttribute(QtWebKit.QWebSettings.PluginsEnabled,True)
self.settings.setAttribute(QtWebKit.QWebSettings.JavascriptEnabled,True)
Run Code Online (Sandbox Code Playgroud)
我正在Youtube视频页面上进行一些测试,这是我的问题的一个例子:
第二部分,可能与第一部分有关:如何告诉PyQt在拍摄截图之前等待几秒钟?正如您在示例中看到的那样,右侧的图像仍然被卸载,因为它们是使用javascript和data属性加载的,在我的脚本中,我在loadFinished信号(onLoad()等效的javascript)上截取屏幕截图.
我的第一个猜测就是
time.sleep(2)
Run Code Online (Sandbox Code Playgroud)
在调用我的捕获方法之前,它不起作用.我假设在这个休眠时间内Webkit加载也处于睡眠状态,防止在页面上加载任何内容.
我试图创建一个自定义信号,但后来我仍然不知道如何在不睡觉的情况下触发它.
我的最后一个猜测是我需要线程化我的应用程序.我对吗?
如果您有任何提示/脚本来帮助我显示Flash内容和/或添加类似信号的setTimeout,我将非常感激!
在此先感谢您的帮助.
编辑: 只需快速编辑即可添加我的解决方案:
timeoutTimer = QTimer()
timeoutTimer.setInterval(3000) # wait for 3secs
timeoutTimer.setSingleShot(True)
timeoutTimer.timeout.connect(theMethodToCallOnTimeout)
Run Code Online (Sandbox Code Playgroud)
关于flash事物:看起来像OSX上的flash播放器坏了(可能与32/64位问题有关).
python ×5
screenshot ×3
image ×2
python-3.x ×2
flash ×1
macos ×1
optimization ×1
performance ×1
pyqt ×1
pyqt5 ×1
qt ×1
transparency ×1
window ×1
windows-7 ×1