欢迎访问宙启技术站
智能推送

Python中使用QWebEnginePage()实现网页截图

发布时间:2023-12-18 03:35:34

QWebEnginePage是Qt提供的一个用于加载和渲染网页内容的类,可以用于实现网页截图功能。下面是一个使用QWebEnginePage来进行网页截图的示例:

首先,我们需要导入必要的模块:

from PyQt5.QtWidgets import QApplication
from PyQt5.QtCore import QUrl
from PyQt5.QtWebEngineWidgets import QWebEnginePage
from PyQt5.QtGui import QPainter, QImage
import sys

接下来,我们创建一个QWebEnginePage对象,并加载指定的URL:

app = QApplication(sys.argv)
page = QWebEnginePage()
page.load(QUrl("http://www.example.com"))

然后,我们需要等待页面加载完成,可以使用QWebEnginePage的loadFinished信号来判断页面是否加载完成:

def onPageLoadFinished(status):
    if not status:
        print("Page load failed!")
        return
    
    # 页面加载完成后,调用截图函数
    captureScreenshot(page)
    
page.loadFinished.connect(onPageLoadFinished)

截图函数captureScreenshot的实现如下:

def captureScreenshot(page):
    # 获取页面尺寸
    webpageSize = page.contentsSize().toSize()
    
    # 创建画布,并设置大小为页面尺寸
    image = QImage(webpageSize, QImage.Format_ARGB32)
    
    # 创建画家
    painter = QPainter(image)
    
    # 渲染页面内容到画家
    page.render(painter)
    
    # 保存图片
    image.save("screenshot.png")
    
    # 关闭画家
    painter.end()
    
    # 退出应用
    app.quit()

最后,我们需要开始应用的事件循环,以便加载页面和截图:

app.exec()

完整的示例代码如下:

from PyQt5.QtWidgets import QApplication
from PyQt5.QtCore import QUrl
from PyQt5.QtWebEngineWidgets import QWebEnginePage
from PyQt5.QtGui import QPainter, QImage
import sys

def captureScreenshot(page):
    webpageSize = page.contentsSize().toSize()
    image = QImage(webpageSize, QImage.Format_ARGB32)
    painter = QPainter(image)
    page.render(painter)
    image.save("screenshot.png")
    painter.end()
    app.quit()

def onPageLoadFinished(status):
    if not status:
        print("Page load failed!")
        return
    captureScreenshot(page)

app = QApplication(sys.argv)
page = QWebEnginePage()
page.load(QUrl("http://www.example.com"))
page.loadFinished.connect(onPageLoadFinished)
app.exec()

这样,程序会将加载的网页内容截图保存为一个名为screenshot.png的文件。

希望这个例子能帮助到你!