【问题标题】:Python Qt4 Prevent JavaScript Alerts/Pop-upsPython Qt4 防止 JavaScript 警报/弹出窗口
【发布时间】:2015-08-11 02:20:13
【问题描述】:

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

【问题讨论】:

    标签: javascript python qt4


    【解决方案1】:

    两个项目: 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()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多