Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PyQT4 Javascript警报_Javascript_Python_Cookies_Pyqt4_Alert - Fatal编程技术网

PyQT4 Javascript警报

PyQT4 Javascript警报,javascript,python,cookies,pyqt4,alert,Javascript,Python,Cookies,Pyqt4,Alert,我有一个Python脚本,可以从网站(www.nowgoal.com)上抓取数据。 由于此网页包含Javascript代码,我将使用PyQt4呈现该网页,然后将其转换为Html,最后解析所需数据。 一切正常,但最近他们添加了一条Javascript警报消息,阻止页面正确呈现。 通过查看源页面,底部是警报消息的Javascript函数: `<script type ="text/javascript" > if(getCookie("enurl_bak")==null) { writ

我有一个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>`
`
if(getCookie(“enurl_bak”)==null)
{
书面记录(“enurl_-bak”,“1”);
如果(确认('Nowgoal.net是我们的备用链接\n\n请添加到您的收藏夹){try{window.external.addFavorite('http://www.nowgoal.net“,'LiveScore-NowGoal.com');}catch(e){alert('Sorry,添加收藏夹失败。您的浏览器无法完成此操作。请使用Ctrl+D添加。“);}”
}
`
此时,设置cookie(name=enurl_bak“valuenull”)跳过警报似乎就足够了。 问题是我不知道怎么做,我到处都找过,但是我找不到一个关于如何使用PyQt4设置cookies的真实示例

以下是我用来呈现网页的内容:

从PyQt4.QtGui导入*
从PyQt4.QtCore导入*
从PyQt4.QtWebKit导入*
从PyQt4导入QT网络
类呈现(QWeb页面):
定义初始化(self,url):
self.app=QApplication(sys.argv)
QWebPage.\uuuuu init\uuuuuuuuuu(自我)
self.loadFinished.connect(self.\u loadFinished)
self.mainFrame().page().setNetworkAccessManager(networkAccessManager)
self.mainFrame().load(QUrl(url))
self.app.exec()
def_加载完成(自身、结果):
self.frame=self.mainFrame()
self.app.quit()
url='1〕http://www.nowgoal.com'
r=呈现(url)
html=r.frame.toHtml()


我还尝试了setHtml(从urllib2)而不是load(QUrl)PyQt4方法,成功地删除了Javascript警报函数。

下面的测试脚本成功地设置和读取了cookie,阻止了警报消息的显示。但是,这只适用于test.html页面:出于某种未知的原因(webkit bug?),它不适用于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_())
test.html


//来自www.nowgoal.com(public.js)
函数getCookie(名称){
变量cname=name+“=”;
var dc=document.cookie;
如果(直流长度>0){
begin=dc.indexOf(cname);
如果(开始!=-1){
开始+=cname.length;
end=dc.indexOf(“;”,begin);
如果(end==-1)end=dc.length;
返回dc.子字符串(开始、结束);
}
}
返回null;
}
if(getCookie('enurl_bak')==null){
警报(“enurl_bak”值为空);
}
更新

似乎没有webkit错误:我只需要按照设置域。

是!! 完成了:)


再次感谢ekhumoro让我走上正确的道路!

感谢您的支持。不幸的是,这不起作用(我仍然收到警告消息),但是我没有收到错误,还需要定义networkAccessManager,我认为networkAccessManager=QtNetwork.QNetworkAccessManager()应该可以。@SkYz3d。我用一个工作示例更新了我的答案。不幸的是,它不适用于您的www.nowgoal.com网站,可能是因为webkit中有一个bug。再次感谢您,ekhumoro,我正在尝试找出这是否真的是一个bug,或者代码是否有问题。它适用于您的“test.html”“这是一个很好的观点……如果我用url(www.nowgoal.com)替换html文档,我仍然会收到警报。我想知道我们是否还必须添加域“www.nowgoal.com”以及“enurl_-bak”cookie信息的过期日期。以及如何做:)做得好!我昨天确实试过设置域名,但没有成功。现在当我今天尝试它时,它起作用了!显然,我做了一些不同的事情,但我不知道是什么(我想我可能需要保留对cookie的引用,但更多的测试表明这是不必要的。哦,好吧…)
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)