我正在使用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()
答案 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()