Pyqt 浏览器自动填充input框小demo

pyqt 浏览器自动登录,需要自动填充input框。


核心代码,如果login模块在主frame下的:

mainframe = self.page().currentFrame()
doc = mainframe.documentElement()
user_elem = doc.findFirst('input[name=WebUserNO]')
user_elem.evaluateJavaScript("this.value='ouyang';")

核心代码,如果login模块在子frame下的:

mainframe = self.page().currentFrame()
children = mainframe.childFrames()
loginframe = children[0]
doc = loginframe.documentElement()
user_elem = doc.findFirst('input[name=WebUserNO]')
user_elem.evaluateJavaScript("this.value='ouyang';")

效果:



全部代码:

# #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
import Image
import unicodedata

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):
            
        #下载网页
        self.bro.savePageHtml()
        
        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):
        #通过chrome 源代码发现loginframe是主frame的第0个子frame
        mainframe = self.page().currentFrame()
        children = mainframe.childFrames()
        loginframe = children[0]
        
        #获取document元素
        doc = loginframe.documentElement()
        
        #打印网页title
        print 'Page load..',str(mainframe.title()).decode('utf-8'),"##"
        
        #截图+裁剪图
        self.savePageImage()
        
        #下载页面
        self.savePageHtml()
        
        #用户名密码
        user_elem = doc.findFirst('input[name=WebUserNO]')
        user_elem.evaluateJavaScript("this.value='ouyang';")
        
        pass_elem = doc.findFirst('input[name=Password]')
        pass_elem.evaluateJavaScript("this.type='text';")
        pass_elem.evaluateJavaScript("this.value='qiqi';")
        
        #验证码
        value = '9999'
        checkcode_elem = doc.findFirst('input[name=Agnomen]')
        checkcode_elem.evaluateJavaScript("this.value='"+value+"';"); 
        a = doc.findAll('input[name=Agnomen]')
        
        
    #截图    
    def savePageImage(self):
        size = self.page().currentFrame().contentsSize()
        img = QtGui.QImage(size, QtGui.QImage.Format_ARGB32)
        painter = QtGui.QPainter(img)
        self.page().currentFrame().render(painter)
        painter.end()
        fileName= "./shot.png";
        if img.save(fileName):
            #裁剪验证码所在区域图片
            im = Image.open(fileName) #打开图片句柄  
            box = (85,260,135,275) #设定裁剪区域  
            region = im.crop(box)  #裁剪图片,并获取句柄region  
            region.save('./checkcode.png',) #保存图片
        else:
            print u"截图失败";
        
    #下载页面
    def savePageHtml(self):
        self.getMainFrame()
        self.getChildFrames()
    
    #获取主框架HTML
    def getMainFrame(self):
        frame = self.page().mainFrame()
        with open('main-html.txt','w') as file:
            file.write(frame.toHtml())
    
    #获取子框架HTML        
    def getChildFrames(self):
        frame = self.page().mainFrame()
        children = frame.childFrames()
        fT = []
        
        for x in range(len(children)):
            with open(str(x)+'-html.txt','w') as file:
                file.write(children[x].toHtml())
            
     
            
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()


  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值