关于某某大学校园网认证系统的一些工作

博主分享了如何使用Selenium编写工具自动完成校园网认证的过程,原先通过宏解决登录问题,现通过Selenium实现更便捷的方式,还利用PyQt4创建了图形界面。文章提及在查找DOM id时发现了敏感信息。
摘要由CSDN通过智能技术生成
由于我们学校的校园网认证是弹出页面的那种,每次输密码都会很蛋疼,于是大一的时候我写过一个宏,每次打开认证界面按一下设定好的键就可以自动填上账号密码了,用了将近三年,效果一直不错。
但最近我发现了一个新的问题,我懒得连浏览器都不想自己打开了。
于是我用selenium又写了一个小工具。Selenium也是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE、Mozilla Firefox、Mozilla Suite等。
# -*- coding:utf-8 -*-

from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.by import By

def submit():
    browser = webdriver.Firefox()
    browser.get("http://61.137.86.87:8080/portalNat444/index.jsp")
    browser.maximize_window()
    try:
        submit_account = WebDriverWait(browser,timeout=10).until(EC.presence_of_element_located((By.ID,'account')),message=u'元素加载超时!')
        submit_account.send_keys("--YOUR_ACCOUNT--")

        submit_password = WebDriverWait(browser,timeout=10).until(EC.presence_of_element_located((By.ID,'userPassword')),message=u'元素加载超时!')
        submit_password.send_keys("--YOUR_PASSWORD--")

        browser.find_element_by_id("login_button").click()

        browser.quit()
        print ("登录成功!")
    except NoSuchElementException as e:
        print ("登录失败:")
        print (e.message)

if __name__ == "__main__":
    submit()
其实这段代码已经可以很好地满足我的需要了。
不过因为这两天在学习PyQt4,所以一顺手就写了一个界面,方便使用。
#coding:utf-8

import sys
import os
from PyQt4 import QtGui ,Qt ,QtCore
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.by import By


class Window( QtGui.QWidget ):
    def __init__( self ):
        super( Window, self ).__init__()
        self.setWindowTitle( "Auto Submit tool" )
        self.setFixedSize(150, 50)

        gridlayout = QtGui.QGridLayout()

        button1 = QtGui.QPushButton( "Come on!" )
        self.connect( button1, QtCore.SIGNAL( 'clicked()' ), self.submit )
        gridlayout.addWidget( button1, 0, 0)

        self.setLayout( gridlayout )


    def OnButton1(self):
        submit()


    def submit(self):

        browser = webdriver.Firefox()
        browser.get("http://61.137.86.87:8080/portalNat444/index.jsp")
        browser.maximize_window()

        try:
            submit_account = WebDriverWait(browser,timeout=10).until(EC.presence_of_element_located((By.ID,'account')),message=u'元素加载超时!')
            submit_account.send_keys("--YOUR_ACCOUNT--")

            submit_password = WebDriverWait(browser,timeout=10).until(EC.presence_of_element_located((By.ID,'userPassword')),message=u'元素加载超时!')
            submit_password.send_keys("--YOUR_PASSWORD--")

            browser.find_element_by_id("login_button").click()

            browser.quit()
            message = "Successful"
            QtGui.QMessageBox.about( self, 'State', message )
            print ("登录成功!")
        except NoSuchElementException as e:
            message = "Login Failed:" + e.message
            print ("登录失败:")
            print (e.message)

app = QtGui.QApplication( sys.argv )
win = Window()
win.show()
app.exec_()
之后我们惯例应该生成exe的,不过这个东西貌似受众并不广泛,需要的就自己去生成一下喽,记得加上selenium库~
python setup.py py2exe -p selenium

另外,我在找DOM的id的时候发现了一些羞羞的东西(啊啊啊,我真的只是去看一下id的啊!)

1.index.js:

var publickey = RSAUtils.getKeyPair("10001","","a8a02b821d52d3d0ca90620c78474b78435423be99da83cc190ab5cb5b9b922a4c8ba6b251e78429757cf11cde119e1eacff46fa3bf3b43ef68ceb29897b7aa6b5b1359fef6f35f32b748dc109fd3d09f3443a2cc3b73e99579f3d0fe6a96ccf6a48bc40056a6cac327d309b93b1d61d6f6e8f4a42fc9540f34f1c4a2e053445");
var logFlag = false;
//设置登录函数
$(document).ready(function(){
   
    //公告
    $('#DialogNote').dialog({
        modal:true,
        title:'XX大学上网注意事项',
        iconCls:'icon-help',
        buttons:[
            {
                text:'确  认 ',
                handler:function()
                {
   
                    $('#DialogNote').dialog('close');
                }
            }]
        });
    //获取公告内容
    $.get('gonggao/usingNote.txt',function(data){
   $('#Notes').html(data)});

    //禁用右键
    $('body').bind('contextmenu', function() {
   
      return false;
    });

    $("#login_button").click(function(){
   

        if(true == logFlag)
        {
                alert("正在提交服务器,请稍后!");
                return;
        }
         if(("" == $("#account").val())||(""==$("#userPassword").val()))
            {
                alert("账号或密码不能空");
                return;
            }
//          if(""==$('#validateCode').val())
//          {
   
//              alert("校验码不能空");
//              return;
//          }
            if(($("#account").val().length>32)||($("#userPassword").val().length>32))
            {
                alert("账号或密码超长");
                return;
            }
            if((""==$("#userIntranetAddress").val())||("null"==$("#userIntranetAddress").val()))
            {
                alert('无法获取您的网络地址,请输入任意其它网站从网关处导航至本认证页面');
                return;
            }
            if((""==$("#brasAddress").val())||("null"==$("#brasAddress").val()))
            {
                alert('无法获取您接入点设备地址,请输入任意其它网站从网关处导航至本认证页面');
                return;
            }
        //设置避免重复提交
        logFlag = true ;
        $("#account").attr("readonly",true);
        $("#userPassword").attr("readonly",true);
        $.ajax({
            url:'AccessServices/login',
            data:{
        'accountID':$("#account").val()+'@zndx.inter',
                'password':RSAUtils.encryptedString(publickey, encodeURIComponent($("#userPassword").val())),
//          'validateCode':$('#validateCode').val(),
                'brasAddress':$("#brasAddress").val(),
                'userIntranetAddress':$("#userIntranetAddress").val()
          },
            type:'post',
            dataType:'json',
            contentType:'application/x-www-form-urlencoded;charset=utf-8',
            cache:false,
            success:function(data){
   
                logFlag = false ;
                $("#account").attr("readonly",false);
                $("#userPassword").attr("readonly",false);
                switch (data.resultCode){
                case '0':
                    window.location="main2.jsp";
                    break;
                case '1'
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值