Как изменить URL ссылки перед переходом на

1

Я хочу щелкнуть по странице и добавить в ссылку привязки некоторый текст.

Например, если пользователь нажимает на якорь с href mysite.com/about, я хочу изменить ссылку: mysite.com/about?myvar=value

Я использовал QWebEngineUrlRequestInterceptor, но щелчок по ссылке не зацепился.

Что я делаю неправильно?

from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtWebEngineWidgets import *
from PyQt5.QtPrintSupport import *
import os
import sys

class MyPage(QWebEnginePage):
    def __init__(self, parent=None):
        super(MyPage, self).__init__(parent)
    def triggerAction(self, action, checked=False):
        if action == QWebEnginePage.OpenLinkInNewWindow:
            self.createWindow(QWebEnginePage.WebBrowserWindow)

        return super(MyPage, self).triggerAction(action, checked)
    def acceptNavigationRequest(self, url, navtype, mainframe):
        if navtype == QWebEnginePage.NavigationTypeLinkClicked:
            # go somewhere else
            self.setUrl(QUrl('https://wikipedia.org'))
            # abort the current navigation
            return False
        return super(MyPage, self).acceptNavigationRequest(url, navtype, mainframe)

class MainWindow(QMainWindow):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)

        self.myPage = MyPage(self) #fab
        #self.setPage(self.myPage) #fab

        self.browser = QWebEngineView()
        self.browser.setUrl(QUrl(WEBSITE_HOME))

        self.browser.loadFinished.connect(self.update_title)
        self.setCentralWidget(self.browser)

        navtb = QToolBar("Navigation")
        navtb.setIconSize(QSize(16, 16))
#        self.addToolBar(navtb)

        back_btn = QAction(QIcon(os.path.join('images', 'arrow-back.png')), "Back", self)
        back_btn.setStatusTip("Back to previous page")
        back_btn.triggered.connect(self.browser.back)
        navtb.addAction(back_btn)

        next_btn = QAction(QIcon(os.path.join('images', 'arrow-forward.png')), "Forward", self)
        next_btn.setStatusTip("Forward to next page")
        next_btn.triggered.connect(self.browser.forward)
        navtb.addAction(next_btn)

        reload_btn = QAction(QIcon(os.path.join('images', 'refresh.png')), "Reload", self)
        reload_btn.setStatusTip("Reload page")
        reload_btn.triggered.connect(self.browser.reload)
        navtb.addAction(reload_btn)

        home_btn = QAction(QIcon(os.path.join('images', 'home.png')), "Home", self)
        home_btn.setStatusTip("Go home")
        home_btn.triggered.connect(self.navigate_home)
        navtb.addAction(home_btn)

        stop_btn = QAction(QIcon(os.path.join('images', 'cross-circle.png')), "Stop", self)
        stop_btn.setStatusTip("Stop loading current page")
        stop_btn.triggered.connect(self.browser.stop)
        navtb.addAction(stop_btn)

        navtb.setContextMenuPolicy(Qt.PreventContextMenu)

        self.show()
        self.setWindowIcon(QIcon(os.path.join('images', 'ma-icon-64.png')))

    def update_title(self):
        title = self.browser.page().title()
        self.setWindowTitle("%s - Title" % title)

    def navigate_home(self):
        self.browser.setUrl(QUrl(WEBSITE_LOGIN))

    def createWindow(self, windowType):
        if windowType == QWebEnginePage.WebBrowserTab:
            self.webView = MyWindow()
            self.webView.setAttribute(Qt.WA_DeleteOnClose, True)
            self.webView.show()
            return self.webView
        return super(MyWindow, self).createWindow(windowType)

WEBSITE_HOME = "http://google.com"
WEBSITE_LOGIN = "http://google.com"

app = QApplication(sys.argv)
window = MainWindow()
app.exec_()
  • 0
    Вы хотите изменить HTML извне ( self.browser )?
  • 0
    Да, я бы добавил текст в URL по клику
Показать ещё 10 комментариев
Теги:
hyperlink
pyqt5

1 ответ

0

Если вы хотите только изменить/заменить URL-адрес до перехода к ссылке, возможно, самым простым решением является переопределить acceptNavigationRequest:

class MyPage(QWebEnginePage):    
    def acceptNavigationRequest(self, url, navtype, mainframe):
        if navtype == QWebEnginePage.NavigationTypeLinkClicked:
            # go somewhere else
            self.setUrl(QUrl('https://wikipedia.org'))
            # abort the current navigation
            return False
        return super(MyPage, self).acceptNavigationRequest(url, navtype, mainframe)
  • 0
    Я пытался, но это не работает ... что я делаю не так? Я изменил код в верхнем сообщении
  • 0
    Хорошо, теперь это работает, я прихожу к self.setUrl. Но в этом методе, как я могу прочитать URL? Я должен добавить параметр GET в URL, который должен быть посещен. что-то вроде self.setUrl (self.getUrl () + "myVar = 123")) @ekhumoro
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню