这是一个系列,用python3写了一个终端下登陆校园网的脚本,因为Centos6.5服务器没有图像界面,所以有这个需求

默认python版本是2,所以需要配置一下Centos的python版本

centos本地编译安装python3

本地上传python3的压缩包

下载Python 3.x,地址:https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tgz

解压命令:tar zxvf Python-3.6.5.tgz

移动命令:mv Python-3.6.5 /usr/local

设置安装目录:./configure –prefix=/usr/local/python3
目的就是把python的安装目录指定一下,这样的话,里面的一些bin目录、lib目录就都会存放在这个目录下面。如果不指定这个安装目录的话,最后python的安装文件将分散到linux的默认目录,不在一块。我们指定安装目录,以后卸载的话直接删除目录就可以干净卸载了。

开始编译:make&&make install

添加环境变量(可以在任意位置执行python3):
echo PATH=’/usr/local/python/bin/:$PATH’ >> /etc/profile
source /etc/profile

至此,centos6.5就可以在任意目录下执行python3命令了

CentOS本地安装PhantomJS

下载Linux压缩包:https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-2.1.1-linux-x86_64.tar.bz2

建议先进入其官方网站再去下载,否则速度奇慢无比,官网:
http://phantomjs.org/download.html

解压:tar -jxvf phantomjs-2.1.1-linux-x86_64.tar.bz2
移动:mv phantomjs-2.1.1-linux-x86_64 /usr/local
添加环境变量:
echo PATH=’/usr/local/phantomjs-2.1.1-linux-x86_64/bin/:$PATH’ >> /etc/profile
source /etc/profile

接下来就是我的校园网登陆脚本了

# coding:utf-8
import random
import time
import sys
from urllib import request

from selenium import webdriver
# 引入配置对象DesiredCapabilities
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

class Loginer:
    def __init__(self,url,username,password):
        self.LoginUrl=url
        self.username=username
        self.password=password

    def MY_USER(self):
        MY_USER_AGENT = [
            'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/62.0.3202.94 Safari/537.36',"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML,like Gecko) Chrome/22.0.1207.1 Safari/537.1","Mozilla/5.0 (X11; CrOS i686 2268.111.0) AppleWebKit/536.11 (KHTML,like Gecko) Chrome/20.0.1132.57 Safari/536.11","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.6 (KHTML,like Gecko) Chrome/20.0.1092.0 Safari/536.6","Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.6 (KHTML,like Gecko) Chrome/20.0.1090.0 Safari/536.6","Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.1 (KHTML,like Gecko) Chrome/19.77.34.5 Safari/537.1","Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/536.5 (KHTML,like Gecko) Chrome/19.0.1084.9 Safari/536.5","Mozilla/5.0 (Windows NT 6.0) AppleWebKit/536.5 (KHTML,like Gecko) Chrome/19.0.1084.36 Safari/536.5","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML,like Gecko) Chrome/19.0.1063.0 Safari/536.3","Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.3 (KHTML,"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_0) AppleWebKit/536.3 (KHTML,"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML,like Gecko) Chrome/19.0.1062.0 Safari/536.3",like Gecko) Chrome/19.0.1061.1 Safari/536.3","Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.3 (KHTML,like Gecko) Chrome/19.0.1061.0 Safari/536.3","Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.24 (KHTML,like Gecko) Chrome/19.0.1055.1 Safari/535.24","Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/535.24 (KHTML,like Gecko) Chrome/19.0.1055.1 Safari/535.24"
            ]
        return MY_USER_AGENT

    def login(self):
        print("Procedure Begin...")

        #测试网线是否插好
        try:
            status=request.urlopen(self.LoginUrl).code
            print("ping "+self.LoginUrl+" return "+str(status))
        except:
            return "4"

        dcap = dict(DesiredCapabilities.PHANTOMJS)
        # 从USER_AGENTS列表中随机选一个浏览器头,伪装浏览器
        print("UserAgent:\t"+random.choice(self.MY_USER()))
        dcap["phantomjs.page.settings.userAgent"] = (random.choice(self.MY_USER())+"")
        # aa=random.choice(self.MY_USER())+""
        # dcap["phantomjs.page.settings.userAgent"]=(aa)

        # 不载入图片,爬页面速度会快很多
        # dcap["phantomjs.page.settings.loadImages"] = False

        # 打开带配置信息的phantomJS浏览器
        executable_path = r'E:\PhantomjsChromedriver\phantomjs-2.1.1-windows\bin\phantomjs.exe'
        # 构造网页驱动
        driver = webdriver.PhantomJS(executable_path,desired_capabilities=dcap,service_args=['--ignore-ssl-errors=true','--ssl-protocol=TLSv1'])

        # 设置10秒页面超时返回,以前遇到过driver.get(url)一直不返回,但也不报错的问题,这时程序会卡住,设置超时选项能解决这个问题。
        driver.set_page_load_timeout(10)

        TIME = time.strftime('%Y-%m-%d-%H:%M:%s',time.localtime(time.time()))
        print(TIME+" Beginning to load PhantomJS")

        driver.get(self.LoginUrl)  # 打开网页

        TIME = time.strftime('%Y-%m-%d-%H:%M:%s',time.localtime(time.time()))
        print(TIME+" Beginning to open the URL:"+self.LoginUrl)
        for i in range(1,2):
            time.sleep(1)
            TIME = time.strftime('%Y-%m-%d-%H%M%s',time.localtime(time.time()))
            driver.save_screenshot(TIME + '.png')
        try:

            print("Input the PostData")
            #下面的xpath需要结合自己的情况去设计
            # print(driver.find_element_by_xpath(".//div[@id='inputs']/input[@id='username']"))
            driver.find_element_by_xpath(".//div[@id='inputs']/input[@id='username']").send_keys(self.username)
            driver.find_element_by_xpath(".//div[@id='inputs']/input[@id='password']").send_keys(self.password)
            print('Input is ok!')

            # driver.get_screenshot_as_file('验证码.png') # 截取当前页面的图片
            # input_solution = input('请输入验证码 :') #手工打码
            # driver.find_element_by_xpath('//input[@name="captcha"]').send_keys(input_solution)
            # time.sleep(2)

            TIME = time.strftime('%Y-%m-%d-%H%M%s',time.localtime(time.time()))
            driver.save_screenshot(TIME + '.png')
        except:
            print("Input is Failed!")
            driver.quit()
            return "2"
        try:
            # print(driver.find_element_by_xpath("//div[@id='btn']/input[@id='submit'][1]"))
            driver.find_element_by_xpath(".//div[@id='btn']/input[@id='submit'][1]").click()  # 表单的提交 表单的提交,可以选择登录按钮然后使用click方法,也可以选择表单然后使用submit方法
            print('Submit is ok!')
        except:
            print("Submit is Failed!")
            driver.quit()
            return "3"

        try:
            print("Page return:")
            for i in range(1,2):
                time.sleep(1)
                TIME=time.strftime('%Y-%m-%d-%H%M%s',time.localtime(time.time()))
                driver.save_screenshot(TIME+'.png')
                res=driver.find_element_by_xpath(".//div[@id='btn']/input[@id='submit']")
            print("Submit value:"+res.get_attribute("value"))
            if res.get_attribute("value")[0]=="注":
                driver.save_screenshot('successed.png')  # 截取当前页面的图片
                driver.quit()
                return "0"
            else:
                driver.save_screenshot("Failed1.png")
                driver.quit()
                return "1"
        except:
            print('登录失败')
            driver.quit()
            return "4"

def main():
    username = input("Enter username:")
    password = input("Enter password:")
    url = "http://172.18.2.2/0.htm"
    do = Loginer(url,password)
    value=do.login()
    if (value=="0"):
        print("Successfully!")
        sys.exit(0)     #程序退出
    return value

if __name__=="__main__":
    value=main()
    # print(value[0])
    while(value!="0"):
        if(value=="1"):
            print("Failed! Please check the username or password and try again!")
        elif(value=="2"):
            print("Failed Please check the input!")
        elif(value=="3"):
            print("Failed Please check the submit!")
        elif(value=="4"):
            print("Failed Please check the NetWork!")
        value=main()

    sys.exit(0)

顺便赚点积分,源码和依赖包已上传至
https://download.csdn.net/download/mikeoperfect/10328037

小结

系列结束,内测也结束了,今晚可以安排上线

CentOS6.5下Python3+PhantomJS验证校园网实战的更多相关文章

  1. HTML5 input新增type属性color颜色拾取器的实例代码

    type 属性规定 input 元素的类型。本文较详细的给大家介绍了HTML5 input新增type属性color颜色拾取器的实例代码,感兴趣的朋友跟随脚本之家小编一起看看吧

  2. 移动HTML5前端框架—MUI的使用

    这篇文章主要介绍了移动HTML5前端框架—MUI的使用的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  3. 使用placeholder属性设置input文本框的提示信息

    这篇文章主要介绍了使用placeholder属性设置input文本框的提示信息,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下

  4. Bootstrap File Input文件上传组件

    这篇文章主要介绍了Bootstrap File Input文件上传组件,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  5. HTML5中input输入框默认提示文字向左向右移动的示例代码

    这篇文章主要介绍了HTML5中input输入框默认提示文字向左向右移动,本文通过实例代码给大家介绍的非常详细对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  6. 如何在Xcode 7上为项目选择python 3.5.1可执行文件?

    我想在Xcode中设置一个python3项目,但是在我要求为该方案选择可执行文件的步骤中我失败了.请参阅PythoninXcode4+?

  7. swift 正则表达式运用实例选自《swifter 100个swift开发必备tip 》

  8. Swift 2.0关键字guard

    viewmode=list前言:当一项新的技术出来的时候,第一参考自然是文档。文档链接guard语句guard语句的作用是:当某些条件不满足的情况下,跳出作用域举个例子:写个函数,保证输入小于10在playground输入如下可以看到输出上述方法和使用if一样但是使用guard有一个好处如果不使用return,break,continue,throw跳出当前作用域,编译器会报错所以,对那些对条件要求十分严格的地方,guard是不二之选。另外,guard也可以使用可选绑定也就是guardlet的格式例如如何

  9. Swift 柯里化(currying)和反柯里化(uncurrying)

    //DemoofcurryingfuncaddTwoNums(a:Int)(num:Int)->Int{returna+num}letaddToFour=addTwoNums(4)letresult=addToFour(num:6)print("result:\(result)")funcgreaterThan(comparor:Int)(input:Int)->Bool{returninput>

  10. Compile Swift 4.0-dev on CentOS7.2

    4.changebranch./swift/utils/update-checkout--schemeswift-3.1-branch这个我没有用,直接就是最新的swift-4.0-dev5.runtimeblockgitclonehttps://github.com/mackyle/blocksruntime.gitCFLAGS='-fPIC'./buildlib./installlib找一个blocksruntime库先装上,Ubuntu上有现成的libblocksruntime-dev,CentOS

随机推荐

  1. 在airgapped(离线)CentOS 6系统上安装yum软件包

    我有一个CentOS6系统,出于安全考虑,它已经被空气泄漏.它可能从未连接到互联网,如果有,它很长时间没有更新.我想将所有.rpm软件包放在一个驱动器上,这样它们就可以脱机安装而无需查询互联网.但是,我在测试VM上遇到的问题是,即使指定了本地路径,yum仍然会挂起并尝试从在线存储库进行更新.另外,有没有办法使用yum-utils/yumdownloader轻松获取该包的所有依赖项和所有依赖项?目前

  2. centos – 命名在日志旋转后停止记录到rsyslog

    CentOS6.2,绑定9.7.3,rsyslog4.6.2我最近设置了一个服务器,我注意到在日志轮换后,named已停止记录到/var/log/messages.我认为这很奇怪,因为所有日志记录都是通过rsyslog进行的,并且named不会直接写入日志文件.这更奇怪,因为我在更新区域文件后命名了HUPed,但它仍然没有记录.在我停止并重新启动命名后,记录恢复.这里发生了什么?

  3. centos – 显示错误的磁盘大小

    对于其中一个磁盘,Df-h在我的服务器上显示错误的空白区域:Cpanel表明它只有34GB免费,但还有更多.几分钟前,我删除了超过80GB的日志文件.所以,我确信它完全错了.fdisk-l/dev/sda2也显示错误:如果没有格式化,我该怎么做才能解决这个问题?并且打开文件描述符就是它需要使用才能做到这一点.所以…使用“lsof”并查找已删除的文件.重新启动写入日志文件的服务,你很可能会看到空间可用.

  4. 如何在centos 6.9上安装docker-ce 17?

    我目前正在尝试在centOS6.9服务器上安装docker-ce17,但是,当运行yuminstalldocker-ce时,我收到以下错误:如果我用跳过的标志运行它我仍然得到相同的消息,有没有人知道这方面的方法?

  5. centos – 闲置工作站的异常负载平均值

    我有一个新的工作站,具有不寻常的高负载平均值.机器规格是:>至强cpu>256GB的RAM>4x512GBSSD连接到LSI2108RAID控制器我从livecd安装了CentOS6.564位,配置了分区,网络,用户/组,并安装了一些软件,如开发工具和MATLAB.在启动几分钟后,工作站负载平均值的值介于0.5到0.9之间.但它没有做任何事情.因此我无法理解为什么负载平均值如此之高.你能帮我诊断一下这个问题吗?

  6. centos – Cryptsetup luks – 检查内核是否支持aes-xts-plain64密码

    我在CentOS5上使用cryptsetupluks加密加密了一堆硬盘.一切都很好,直到我将系统升级到CentOS6.现在我再也无法安装磁盘了.使用我的关键短语装载:我收到此错误:在/var/log/messages中:有关如何装载的任何想法?找到解决方案问题是驱动器使用大约512个字符长的交互式关键短语加密.出于某种原因,CentOS6中的新内核模块在由旧版本创建时无法正确读取512个字符的加密密钥.似乎只会影响内核或cryptsetup的不同版本,因为在同一系统上创建和打开时,512字符的密钥将起作用

  7. centos – 大量ssh登录尝试

    22个我今天登录CentOS盒找到以下内容这是过去3天内的11次登录尝试.WTF?请注意,这是我从我的提供商处获得的全新IP,该盒子是全新的.我还没有发布任何关于此框的内容.为什么我会进行如此大量的登录尝试?是某种IP/端口扫描?基本上有4名匪徒,其中2名来自中国,1名来自香港,1名来自Verizon.这只发生在SSH上.HTTP上没有问题.我应该将罪魁祸首子网路由吗?你们有什么建议?

  8. centos – kswap使用100%的CPU,即使有100GB的RAM也可用

    >Linux内核是否应该足够智能,只需从内存中清除旧缓存页而不是启动kswap?

  9. centos – Azure将VM从A2 / 3调整为DS2 v2

    我正在尝试调整前一段时间创建的几个AzureVM,从基本的A3和标准A3到标准的DS2v2.我似乎没有能力调整到这个大小的VM.必须从头开始重建服务器会有点痛苦.如果它有所不同我在VM中运行CentOS,每个都有一个带有应用程序和操作系统的磁盘.任何人都可以告诉我是否可以在不删除磁盘的情况下删除VM,创建新VM然后将磁盘附加到新VM?

  10. centos – 广泛使用RAM时服务器计算速度减慢

    我在非常具体的情况下遇到服务器速度下降的问题.事实是:>1)我使用计算应用WRF>2)我使用双XeonE5-2620v3和128GBRAM(NUMA架构–可能与问题有关!

返回
顶部