PyQT4 Javascript脚本

2024-10-02 00:30:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个Python脚本,可以从网站上获取数据(www.nowgoal.com网站). 因为这个网页包含Javascript代码,所以我使用PyQt4呈现页面,然后将其转换为Html,最后解析所需的数据。 一切正常,但最近他们添加了一个Javascript警告消息,防止页面被正确呈现。 通过查看源页面,底部是警报消息的Javascript函数:

`<script type ="text/javascript" >
if(getCookie("enurl_bak")==null)
{
 writeCookie("enurl_bak", "1");
if(confirm('Nowgoal.net is our spare link\n\n Please add to your favorites'))      {try{window.external.addFavorite('http://www.nowgoal.net','LiveScore - NowGoal.com');}catch(e)   {alert('Sorry, fail to add favorits. Your browser can\'t finish this operation. Please use Ctrl+D to    add.');}}
}
</script>`

此时,设置一个cookie(name=enurl\u bak”value<;>null)即可跳过警报。 问题是我不知道该怎么做,我到处找遍了,但是我没有找到一个关于如何使用PyQt4设置cookies的真正例子。在

以下是我用来呈现网页的内容: from PyQt4.QtGui import * from PyQt4.QtCore import * from PyQt4.QtWebKit import * from PyQt4 import QtNetwork class Render(QWebPage): def __init__(self, url): self.app = QApplication(sys.argv) QWebPage.__init__(self) self.loadFinished.connect(self._loadFinished) self.mainFrame().page().setNetworkAccessManager(networkAccessManager) self.mainFrame().load(QUrl(url)) self.app.exec_() def _loadFinished(self, result): self.frame = self.mainFrame() self.app.quit() url = 'http://www.nowgoal.com' r = Render(url) html = r.frame.toHtml()

我还尝试了setHtml(来自urllib2)而不是load(qrl)PyQt4方法,方法是删除Javascript警报函数,但没有成功。在


Tags: tofromimportselfcomaddurlwww
2条回答

下面的测试脚本成功设置并读取cookie,从而阻止显示警报消息。但是,这只适用于测试.html页面:因为一些未知的原因(webkit错误?),它不适用于www.nowgoal.com网站网站。在

from PyQt4 import QtCore, QtGui, QtWebKit, QtNetwork

class WebPage(QtWebKit.QWebPage):
    def __init__(self):
        QtWebKit.QWebPage.__init__(self)
        self.cookies = QtNetwork.QNetworkCookieJar(self)
        self.cookies.setAllCookies(
            [QtNetwork.QNetworkCookie('enurl_bak', '1')])
        self.networkAccessManager().setCookieJar(self.cookies)
        self.mainFrame().loadFinished.connect(self.handleLoadFinished)

    def start(self, url):
        self.mainFrame().load(QtCore.QUrl(url))

    def handleLoadFinished(self):
        print('handleLoadFinished')
        QtGui.qApp.quit()

if __name__ == '__main__':

    import sys
    app = QtGui.QApplication(sys.argv)
    window = WebPage()
    window.start('test.html')
    sys.exit(app.exec_())

测试.html

^{pr2}$

更新

似乎没有webkit错误:我只需要根据answer by SkY3d设置域。在

是的!! 完成了:)

from PyQt4.QtNetwork import QNetworkCookie, QNetworkCookieJar
from PyQt4.QtGui import *  
from PyQt4.QtCore import *  
from PyQt4.QtWebKit import *
import sys

class Render(QWebPage):  
    def __init__(self, url):  
        self.app = QApplication(sys.argv)  
        QWebPage.__init__(self)
        self.loadFinished.connect(self._loadFinished)  
        self.mainFrame().load(QUrl(url))
        self.cookie = QNetworkCookie()
        self.cookie.setDomain('.nowgoal.com')
        self.cookie.setName('enurl_bak')
        self.cookiejar = QNetworkCookieJar()
        self.cookiejar.setAllCookies([self.cookie])
        self.networkAccessManager().setCookieJar(self.cookiejar)
        self.app.exec_()  

    def _loadFinished(self, result):  
        self.frame = self.mainFrame()
        print"loadfinished"
        self.app.quit()

url = 'http://www.nowgoal.com'
Render(url)  

再次感谢艾克胡默让我走上了正确的道路!在

相关问题 更多 >

    热门问题