恩,有些时候需要让程序自动化控制浏览器,其中遇到一个问题就是,如何禁止浏览器弹框?
能否自动确定?或者压根就不让它弹框呢?
在怎样自动关闭JS的 alert对话框 帖子中找到解决方法,核心代码:
#浏览器
class MyBrowser(QWebView):
def __init__(self):
QWebView.__init__(self)
self.webpage = QWebPage(self)
self.setPage(self.webpage)
self.url = 'http://jiaowu.dlufl.edu.cn/'
self.webpage.javaScriptAlert = self._javascript_alert #重载 alert函数
self.load(QtCore.QUrl(self.url))
QtCore.QObject.connect(self,QtCore.SIGNAL('loadFinished(bool)'),self.do_loadFinished)
#重写js alert,让它自动确定
def _javascript_alert(self, webframe, message):
return
完成效果,怎么点登录都不会弹框:
如果我们注释掉:
#self.webpage.javaScriptAlert = self._javascript_alert #重载 alert函数那么:
全部代码:
# #coding:utf-8
from PyQt4 import QtGui
from PyQt4 import QtCore
from PyQt4.QtWebKit import*
from PyQt4 import QtCore, QtGui
from PyQt4 import uic
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4.QtWebKit import *
from PyQt4.QtNetwork import *
import sys
from IPython import embed
reload(sys)
sys.setdefaultencoding('utf-8')
#解决QString中文乱码
QTextCodec.setCodecForCStrings(QTextCodec.codecForName("utf-8"))
#控制台
class MyConsole(QWidget):
def __init__(self,parent):
QWidget.__init__(self)
self.parent = parent
self.initUI()
#初始化UI
def initUI(self):
self.gridlayout = QtGui.QGridLayout()
#设置出20 x 20 的格局
for i in range(20):
self.gridlayout.setColumnStretch(i,1)
self.gridlayout.setRowStretch(i,1)
lb1 = QLabel(u'账户:')
lb2 = QLabel(u'密码:')
self.userEntry = QLineEdit()
self.passEntry = QLineEdit()
self.passEntry.setEchoMode(QLineEdit.Password)
self.loginBtn = QtGui.QPushButton(u"登录")
self.loginBtn.setFixedSize(40,20)
self.connect(self.loginBtn, QtCore.SIGNAL('clicked()'), self.onLoginButton)
self.gridlayout.addWidget(lb1, 0, 0)
self.gridlayout.addWidget(lb2, 1, 0)
self.gridlayout.addWidget(self.userEntry, 0, 1,1,3)
self.gridlayout.addWidget(self.passEntry, 1, 1,1,3)
self.gridlayout.addWidget(self.loginBtn, 0, 4,1,2)
self.setLayout(self.gridlayout)
#响应登录按钮
def onLoginButton(self):
username = self.userEntry.text()
password = self.passEntry.text()
QtGui.QMessageBox.about(self, username+u'登录成功', u"密码是:"+password)
tmpstr = username+u'登录成功!\n' + u"密码是:"+password
print str(tmpstr).decode('utf-8')
#浏览器
class MyBrowser(QWebView):
def __init__(self):
QWebView.__init__(self)
self.webpage = QWebPage(self)
self.setPage(self.webpage)
self.url = 'http://jiaowu.dlufl.edu.cn/'
self.webpage.javaScriptAlert = self._javascript_alert #重载 alert函数
self.load(QtCore.QUrl(self.url))
QtCore.QObject.connect(self,QtCore.SIGNAL('loadFinished(bool)'),self.do_loadFinished)
#重写js alert,让它自动确定
def _javascript_alert(self, webframe, message):
return
#页面加载完成的处理函数
def do_loadFinished(self):
frame = self.page().currentFrame()
doc = self.page().currentFrame().documentElement()
#打印网页title
print 'Page load..',str(frame.title()).decode('utf-8'),"##"
class MainWindow(QtGui.QMainWindow):
def __init__(self,parent=None):
QtGui.QMainWindow.__init__(self, parent)
tabs = QtGui.QTabWidget(self)
#tab1
tab1 = QtGui.QWidget()
vBox1 = QtGui.QVBoxLayout()
console = MyConsole(self)
vBox1.addWidget(console)
tab1.setLayout(vBox1)
#tab2
tab2 = QtGui.QWidget()
web = MyBrowser()
vBox2 = QtGui.QVBoxLayout()
vBox2.addWidget(web)
tab2.setLayout(vBox2)
tabs.addTab(tab1,u"控制台")
tabs.addTab(tab2,u"浏览器")
tabs.resize(500, 350)
self.resize(500, 350)
#禁止最大化
self.setWindowFlags(QtCore.Qt.WindowMinimizeButtonHint)
self.show()
def main():
app = QtGui.QApplication(sys.argv)
app.connect( app, SIGNAL( "lastWindowClosed()" ), app.quit);
win = MainWindow()
sys.exit(app.exec_())
if __name__ == '__main__':
main()