Python PyQt5 webview无法打开没有url创建的选项卡

Python PyQt5 webview无法打开没有url创建的选项卡,python,pyqt,pyqt5,qwebview,Python,Pyqt,Pyqt5,Qwebview,尝试使用pyqt5分析网站。我的问题是,此页面创建的选项卡不是链接,而是使用onclick函数创建选项卡的按钮,因此当我使用linkClicked信号时,不会发生任何事情。生成的选项卡就是我要分析的选项卡 我在网上找到的所有示例都会打开带有链接的选项卡,因此我无法理解这一点 另外,我知道Qwebkit是谓词,但我必须使用它来兼容windows xp 我所拥有的: from PyQt5 import QtCore, QtGui, QtWidgets from PyQt5.QtCore import

尝试使用pyqt5分析网站。我的问题是,此页面创建的选项卡不是链接,而是使用onclick函数创建选项卡的按钮,因此当我使用linkClicked信号时,不会发生任何事情。生成的选项卡就是我要分析的选项卡

我在网上找到的所有示例都会打开带有链接的选项卡,因此我无法理解这一点

另外,我知道Qwebkit是谓词,但我必须使用它来兼容windows xp

我所拥有的:

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import QUrl
from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5.QtWebKitWidgets import QWebView , QWebPage
from PyQt5 import QtWebKit
from PyQt5.QtWebKit import QWebSettings
from PyQt5.QtNetwork import *
import sys




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

        self.tabWidget = QtWidgets.QTabWidget(self)        
        self.setCentralWidget(self.tabWidget)        
        self.loadUrl(QtCore.QUrl('https://www.notams.faa.gov/dinsQueryWeb/'))

    def loadUrl(self, url):    
        self.view = QWebView()  
        self.view.loadFinished.connect(self._on_load_finished)
        self.view.linkClicked.connect(self.on_linkClicked)
        self.view.loadStarted.connect(self.on_url_changed)
        self.view.page().setLinkDelegationPolicy(QWebPage.DelegateAllLinks)
        self.tabWidget.setCurrentIndex(self.tabWidget.addTab(self.view, 'loading...'))
        self.view.load(url)

    def _on_load_finished(self, ok):
        index = self.tabWidget.indexOf(self.sender())
        self.tabWidget.setTabText(index, self.sender().url().host())
        self.view.page().mainFrame().evaluateJavaScript("document.getElementsByTagName('button')[0].click();")
        self.view.page().mainFrame().evaluateJavaScript("document.getElementsByName('retrieveLocId')[0].value='%s';"%('lgel lgal lggg'))
        self.view.page().mainFrame().evaluateJavaScript("document.getElementsByName('submit')[0].click();")

    def on_linkClicked(self, url):        
        self.loadUrl(url)

    def on_url_changed(self):
        print('xdddd')



def main():
    app = QtWidgets.QApplication(sys.argv)
    form = MainForm()
    form.show()
    app.exec_()

if __name__ == '__main__':
    main()

当页面请求创建新窗口时,调用;如果该方法未返回新的QWeb[Engine]视图或未实现,则在该视图上调用默认的类似方法;同样,如果没有实现,什么也不会发生

如果要在请求的同一窗口中加载新窗口,只需覆盖WebView并返回self,并启用对从javascript打开新窗口的支持:

class SelfishWebView(QWebView):
    def createWindow(self, windowType):
        return self


class MainForm(QtWidgets.QMainWindow):
    # ...
    def loadUrl(self, url):    
        self.view = SelfishWebView()  
        self.view.page().settings().setAttribute(
            QWebSettings.JavascriptCanOpenWindows, True)
        # ...

请注意,如果您像那样执行javascript,它将尝试在加载新页面后再次递归调用,并且由于新页面中有一个按钮,它将尝试单击它;第一次加载信号后,应立即断开信号

    def _on_load_finished(self, ok):
        self.view.loadFinished.disconnect(self._on_load_finished)
        # ...

我不明白。如果要解析另一个页面,为什么要加载第一个页面?您不能只向目标发送post请求吗?否生成的页面为空。它需要从第一个页面生成数据否,不需要,您必须将网络请求参数和字段添加到url。顺便说一句,这个页面似乎也支持GET方法,所以你可以直接加载这个:;请注意,retrieveLocId将您的关键字用URL编码的空格分隔:lgel lgal lggg变为lgel%20lgal%20lggg我是网页上的noob,谢谢。如果有人可以解决重定向问题,但您解决了我的问题,我将留下此消息。向您致意。欢迎!我补充了问题的答案,即使这不是你真正的问题。