恩,有些時候需要讓程序自動化控制瀏覽器,其中遇到一個問題就是,如何禁止瀏覽器彈框?
能否自動確定?或者壓根就不讓它彈框呢?
在怎樣自動關閉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()