python无头浏览器截图_Python中无头QtWebKit浏览器中多个网页的屏幕截图

就像Luke的回答中所描述的那样,我把事情进行了一番混乱,以避免为每个Render创建一个QApplication实例

不是最整洁的,但对我有用:import re

import sys

import time

# Tested with PySide 1.0.9, changing imports to PyQt should work identically

from PySide.QtCore import Qt, QUrl

from PySide.QtGui import QApplication, QImage, QPainter

from PySide.QtWebKit import QWebPage, QWebSettings

def os_safe_name(url):

url = re.sub("[^a-zA-Z0-9_-]+", "_", url)

url = re.sub("_{2,}", "_", url)

return url

class Render(QWebPage):

def __init__(self, url):

QWebPage.__init__(self)

self.url = url

self.finished = False

# Settings

s = self.settings()

#s.setAttribute(QWebSettings.AutoLoadImages, False)

s.setAttribute(QWebSettings.JavascriptCanOpenWindows, False)

s.setAttribute(QWebSettings.PluginsEnabled, True)

#self.mainFrame().setScrollBarPolicy(Qt.Vertical, Qt.ScrollBarAlwaysOff)

self.mainFrame().setScrollBarPolicy(Qt.Horizontal, Qt.ScrollBarAlwaysOff)

# When page is loaded, callback saves image to file

self.loadFinished.connect(self._loadFinished)

self.mainFrame().load(QUrl(url))

def _loadFinished(self, result):

frame = self.mainFrame()

size = frame.contentsSize()

size.setWidth(1366)

self.setViewportSize(size)

image = QImage(self.viewportSize(), QImage.Format_ARGB32)

painter = QPainter(image)

frame.render(painter)

painter.end()

self.filepath = "output/%s.png" % os_safe_name(self.url)

image.save(self.filepath)

self.finished = True

def run(url, app = None):

if app is None:

app = QApplication(sys.argv)

r = Render(url)

while not r.finished:

app.processEvents()

time.sleep(0.01)

return r.filepath

if __name__ == '__main__':

app = QApplication(sys.argv)

print run("http://stackoverflow.com", app=app)

print run("http://google.com", app=app)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值