javascript - PyQT4 Javascript 警报

标签 javascript python cookies pyqt4 alert

我有一个 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_bak"; value<>null) 似乎足以跳过警报。 问题是我不知道该怎么做,我到处都看过,但我找不到关于如何使用 PyQt4 设置 cookie 的真实示例。

这是我用来呈现网页的内容: 从 PyQt4.QtGui 导入 * 从 PyQt4.QtCore 导入 * 从 PyQt4.QtWebKit 导入 * 从 PyQt4 导入 QtNetwork 渲染类(QWebPage): def __init__( self ,网址): 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 ,结果): self.frame = self.mainFrame() self.app.quit() url = 'http://www.nowgoal.com' r = 渲染(网址) html = r.frame.toHtml()

我还通过删除 Javascript 警报功能尝试了 setHtml(来自 urllib2)而不是 load(QUrl) PyQt4 方法,但没有成功。

最佳答案

下面的测试脚本成功地设置和读取了 cookie,防止显示警告消息。但是,这仅适用于 test.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_())

test.html:

<script type="text/javascript">
// from www.nowgoal.com (public.js)
function getCookie(name){
    var cname = name + "=";
    var dc = document.cookie;
    if (dc.length > 0){
        begin = dc.indexOf(cname);
        if (begin != -1){
            begin += cname.length;
            end = dc.indexOf(";", begin);
            if (end == -1) end = dc.length;
            return dc.substring(begin, end);
        }
    }
    return null;
}
if (getCookie('enurl_bak') == null) {
    alert('"enurl_bak" value is null');
}
</script>

更新:

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

关于javascript - PyQT4 Javascript 警报,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22964637/

相关文章:

python - 迭代行并根据条件 pandas python 打印

python - 使用 MQTT 发送的图像的最大尺寸是多少

php - Cookie 过期时间

Javascript object.value 返回未定义

PHP Session 和受限的 mysql 访问

javascript - 如何将鼠标单击 x 值转换为 d3 中 x 轴域中的值?

javascript - 你如何使用 javascript 更改 &lt;input&gt; 元素的背景颜色

javascript - 如果浏览器不支持某些代码,如何执行特定的代码块?

javascript - 尝试将 jQuery get 请求转换为可解析对象

python - 创建具有理解力的字典?