Python Qt4防止JavaScript警报/弹出窗口

时间:2015-08-11 02:20:14

标签: javascript python qt4

我正在使用Qt4自动化一些浏览器测试。由于我需要检查一些JavaScript DOM元素,因此我不能将源页面作为文本拉出,因为需要将JS加载到浏览器中以便可以搜索对象。

问题是,如果HTML中出现警告,则会弹出并阻止我的脚本自动继续。我已经包含了一个示例问题的示例python脚本(虽然不是我的应用程序的搜索部分)。浏览器对象甚至不需要显示要在“页面加载”上执行的JS警报的页面。有什么方法可以阻止这种或使用Qt4建议的解决方法?

#!/usr/bin/python

import sys

from PyQt4.QtGui import *  
from PyQt4.QtCore import *  
from PyQt4.QtWebKit import *  

html = """

<html>
<frameset cols="1%,99%">
<frame name="frame1" id="frame1" src="">
<frame name='frame2' id='frame2' src='javascript:var testVar="Prevent Me!"; alert(testVar);'> 
</frameset>
</html>

"""

app = QApplication(sys.argv)
browser = QWebView()
browser.setHtml(html)
browser.close()

1 个答案:

答案 0 :(得分:0)

两个项目: 1.使用QWebPage而不是QWebView() 2.必须覆盖类

#!/usr/bin/python

import sys

from PyQt4.QtGui import *  
from PyQt4.QtCore import *  
from PyQt4.QtWebKit import * 

class QWebPageOverride(QWebPage):
    def javaScriptAlert(browser, frame, message):
            """Notifies session for alert, then pass."""
            print "signal for javaScriptAlert (class) fired"

html = """

<html>
<frameset cols="1%,99%">
<frame name="frame1" id="frame1" src="">
<frame name='frame2' id='frame2' src='javascript:var testVar="Prevent Me!"; alert(testVar);'> 
</frameset>
</html>

"""

app = QApplication(sys.argv)
browser = QWebPageOverride()
frame = browser.mainFrame()
frame.setHtml(html)
print "No popup"

browser2 = QWebPage()
frame2 = browser2.mainFrame()
frame2.setHtml(html)
print "After Popup"

exit()