• 智能AI问答!更聪明、更完整、原创作!
  • 一款基于GPT的超级AI机器人,可以回答问题、聊天、创作、写文案!

页面超链接无法点击

发布于 2023-10-12 00:40:31

如果在使用PyQt5和Cefpython创建的浏览器中,页面的超链接无法点击,可能是由于缺少处理链接点击事件的代码。

在上述示例代码的Browser类中,您可以添加一个方法来处理链接点击事件,并在初始化浏览器时设置相应的处理函数。以下是更新后的代码:

import sys
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5.QtWebEngineWidgets import QWebEngineView
from cefpython3 import cefpython as cef

class Browser(QWidget):
    def __init__(self):
        super().__init__()

        self.setWindowTitle("Simple Browser")
        self.setWindowIcon(QIcon("icon.png"))
        self.resize(800, 600)

        layout = QVBoxLayout()
        self.browser = QWebEngineView()
        layout.addWidget(self.browser)

        self.setLayout(layout)

        # Initialize CEF
        sys.excepthook = cef.ExceptHook
        cef.Initialize()

        self.browser.page().profile().downloadRequested.connect(self.handle_download) # 处理下载请求
        self.browser.page().profile().set_http_user_agent("Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3") # 设置用户代理

        # 定义链接点击事件处理
        self.browser.page().profile().set_handler({
            "OnBeforeBrowse": self.on_before_browse,
            "OnOpenURLFromTab": self.on_open_url_from_tab,
        }) 

    # 处理链接点击事件
    def on_before_browse(self, browser, frame, request, user_gesture, is_redirect):
        url = request["url"]
        self.browser.load(QUrl(url)) 

    # 还原浏览器默认行为
    def on_open_url_from_tab(self, **kwargs):
        return False

    def load_url(self, url):
        self.browser.load(QUrl(url))

    def closeEvent(self, event):
        cef.Shutdown()

if __name__ == "__main__":
    app = QApplication(sys.argv)
    browser = Browser()
    browser.load_url("https://www.google.com")  # 加载页面的初始URL
    browser.show()
    sys.exit(app.exec_())

在上述代码中,我们通过使用browser.page().profile()来获取页面的配置文件,并设置了用户代理以及下载请求的处理函数。此外,我们还定义了on_before_browse方法作为链接点击事件的处理函数,当用户点击页面上的超链接时,会触发该方法,并加载对应的链接。

希望这次更新后的代码能解决您的问题!如果还有其他疑问,请随时向我提问。

0 条评论

发布
问题

在线
客服