Skip to main content
 首页 » 编程设计

python之重新实现QWebView复制链接

2024年08月26日42freeliver54

我需要在上下文菜单中重新实现 QWebView 的“复制链接”,以便在例程中执行其他操作。

复制链接是唯一在 ajax 站点内真正有效的链接,因此我试图重新实现通过此方法传递的“从链接下载”。

问题是我不知道如何重新实现用于检索 URL 的“复制链接”的基本功能。

请您参考如下方法:

您可以通过重新实现 QWebView.contextMenu 添加额外的菜单项并使用 QWebPage.createStandardContextMenu 生成标准菜单.

然后你需要做的就是得到一个hit-test result从请求上下文菜单的位置为您提供 url(如果有的话)。

这是一个基本思想的简单演示:

from PyQt4 import QtGui, QtWebKit 
 
class Browser(QtWebKit.QWebView): 
    def __init__(self): 
        super(Browser, self).__init__() 
        self.setHtml(''' 
        <html><head><title>Test Page</title> 
        <body> 
        <p><a href="https://stackoverflow.com">link</a></p> 
        </body> 
        </html> 
        ''') 
 
    def contextMenuEvent(self, event): 
        menu = self.page().createStandardContextMenu() 
        hit = self.page().currentFrame().hitTestContent(event.pos()) 
        url = hit.linkUrl() 
        if not url.isEmpty(): 
            menu.addSeparator() 
            action = menu.addAction('Download') 
            action.triggered.connect(lambda: self.download(url)) 
        menu.exec_(event.globalPos()) 
 
    def download(self, url): 
        print('download:', url) 
 
if __name__ == '__main__': 
 
    import sys 
    app = QtGui.QApplication(sys.argv) 
    browser = Browser() 
    browser.setGeometry(800, 200, 400, 200) 
    browser.show() 
    sys.exit(app.exec_())