Этот вариант на pyqt5 работает. Проверено.
#!/usr/bin/python
# -*- coding: utf-8 -*-
import webbrowser
from PyQt5.QtWidgets import *
from PyQt5.QtWebEngineWidgets import *
s = str("""<!DOCTYPE html>
<html>
<head></head>
<div style="text-align: center;">
<iframe frameborder="0" allowtransparency="true" scrolling="no" src="https://money.yandex.ru/quickpay/shop-widget?account=410013878567203&quickpay=shop&payment-type-choice=on&mobile-payment-type-choice=on&writer=seller&targets=asdf&targets-hint=&default-sum=&button-text=01&successURL="" width="450" height="200"></iframe>
</div>
<div>
<a href="http://google.com">TEST LINK</a>
</div>
</body>
</html>""")
class MainWindow(QWidget):
def __init__(self, parent=None):
QWidget.__init__(self, parent)
self.resize(700, 400)
self.view = QWebEngineView(self)
mypage = MyPage(self.view)
self.view.setPage(mypage)
mypage.setHtml(s)
grid = QGridLayout()
grid.addWidget(self.view, 0, 0)
self.setLayout(grid)
self.show()
class MyPage(QWebEnginePage):
def __init__(self, parent):
super().__init__(parent)
self.in_window = False # придумал переменную
def createWindow(self, type): # которую мы
self.in_window = True # тутже изменяем если просится
return self # открытие в новом окне
def acceptNavigationRequest(self, QUrl, type, isMainFrame):
url_string = QUrl.toString()
print(type, isMainFrame, QUrl)
if self.in_window and type==2 and url_string != "https://money.yandex.ru/quickpay/confirm.xml":
webbrowser.open(url_string)
self.in_window = False
self.setHtml(s)
return True
if __name__ == '__main__':
app = None
if not QApplication.instance():
app = QApplication([])
dlg = MainWindow()
if app: app.exec_()