简单的selenium+python实现自动化打卡(手把手)

        本文章大约2300字,阅读大概需要7分钟。利用python的基本操作实现每天的打卡(学校的报平安系统),
   很体贴,很关心我们。但是因为每天都起不来被老师催了好几次。就写了个python,通过问卷星获取账号
   密码,py实现自动化。
         大二python小白~各位大神多多指点。

1.环境准备

python环境准备

  • python 3.8 : 下载的话直接去官网就好。
  • PyCharm :(jetBrains出品,必为极品)一定要注意配置好路径,最好是找一个教程跟着去安装,这里就推荐一下这个。
  • 下载需要使用的包 :selenium request pandas 直接在pycharm里面下载就可以,其实pip也挺方便的,支持批量下载。
  • 最后就是一颗沃糙的心。
    浏览器选择
  • 火狐浏览器最方便,pycharm自带Firefox的驱动方法(有一个超级厉害的插件一会说儿)
  • 谷歌浏览器也可以,但是需要手动下载webdriver

2.新建项目,导入包

from selenium import webdriver
import time
import requests
import xlrd
import pandas as pd
import numpy as np
  1. selemium是实现自动化很强大的一个库,不仅仅是python,java也可以使用。
  2. time包是因为要使用sleep,毕竟你0.00001s干完所有操作很危险的。
  3. requests爬虫必备。
  4. xlrd pandas numpy ,python对excel文件的处理,可以通过很多方式实现,推荐pandas进行读写文件,xlrd对excel文件的处理也有着优势,但pandas对数据的提取挖掘能力更强悍。
  5. 对list、array、DataFrame、numpy的操作要有一定的认识,下文有部分讲解。

3.爬虫获取问卷星的excel文件

wzxdownload="https://www.wjx.cn/wjx/activitystat/viewstatsummary.aspx?activity=67150033&reportid=-1&dw=1&dt=2"
header = {
    'User-Agent': '',
    'Cookie':''
}
f=requests.get(wzxdownload,headers=header)
with open('text2','wb')as code:
    code.write(f.content)
excelfile=r'text2.xlsx'

有部分爬虫知识就好,这只是一个简单的利用request下载文件的办法,当然也可以利用爬虫直接把信息爬下来,但是考虑到数据的更新和安全问题,选择了直接下载文件。

  • 获取下载地址 :一定要认准是下载地址 。
  • 获取cookie :获取cookie,可以使用浏览器 > F12 > console > document.cookie 。鉴于cookie的实时更新,更有效的办法是通过request的操作进行实时更新 。
  • 保存文件为 text2.xlsx 。

4.对excel文件进行操作

df= pd.DataFrame(pd.read_excel(excelfile))
print(df)
zhanghao=df['1、账号'].values
print(zhanghao)
mima=df['2、密码'].values
print(mima)
ip=df['来自IP'].values
print(len(zhanghao))
print(len(mima))
print(len(ip))

pandas的操作 有时间可以了解一下pandas 毕竟数据时代。。
这里需要注意,如果你在这一步的操作转为为了list,长度是len(),但是如果是numpy形式的话,应该是length。

f1=xlrd.open_workbook('text2.xlsx')
name=f1.sheet_names()[0]
sheet=f1.sheet_by_name(name)
zhanghao=sheet.col_values(6)
del zhanghao[0]
mima=(sheet.col_values(7))
[int(x) for x in range(len(mima))]
del mima[0]
ip=sheet.col_values(5)
del ip[0]
print(ip)
print(mima)

这里贴一下xlrd的操作(没有选用就不讲了),有点坑人的是他会把python认为的int型自动转化为浮点型,也就是自动加小数点。。。解决:必须手动在excel中转为为文本型。

5.selenium的自动化操作

废话不说。

for i in range(len(mima)):
    try:
        # driver = webdriver.Firefox()#打开浏览器进行操作
        fireFoxOptions = webdriver.FirefoxOptions()
        fireFoxOptions.set_headless()
        driver = webdriver.Firefox(firefox_options=fireFoxOptions)#自动进行模拟不可视
        driver.get('https://s.bjfu.edu.cn/tp_fp/view?m=fp#act=fp/myserviceapply/indexNew')
        print(f"****{zhanghao[i]}打开网址成功")
        time.sleep(1)
        driver.find_element_by_id('un').clear()
        print(zhanghao[i])
        a=str(zhanghao[i])
        b=str(mima[i])
        print(a)
        print(b)
        driver.find_element_by_id('un').send_keys(a)
        print(f"****{zhanghao[i]}账号输入成功")
        time.sleep(1)
        driver.find_element_by_id('pd').clear()
        driver.find_element_by_id('pd').send_keys(b)
        print(f"****{zhanghao[i]}密码输入成功")
        time.sleep(2)
        driver.find_element_by_class_name('login_box_landing_btn').click()
        print(f"****{zhanghao[i]}登录成功")
        time.sleep(2)
        driver.find_element_by_name('svs_name_val').click()
        print(f"****{zhanghao[i]}进入报平安界面成功")
        time.sleep(5)
        driver.find_element_by_id('commit').click()
        print(f"****{zhanghao[i]}打卡成功")
        time.sleep(2)
        finish.append(zhanghao[i])
        print(f"已完成{i}次报平安操作")
        driver.quit()
        continue
    except Exception as e:
        print("ip地址"+f"{ip[i]}"+"密码错误"+"详细信息:"+f"{e}")
        continue

这里的selenium最基本的就以下几个操作 :

  • find:寻找元素
  • click:触发事件
  • clear:清除操作
  • send:填写数据

6.尾言

测试代码正在改进的地方:

  • 利用firefox的插件—seleniumIDE—进行脚本的录制,这样可以实现程序的复用性,就可以实现功能的扩展。
  • 实现数据的动态交互,搭建在服务器,实现数据的全天接收。
  • python是真的强悍,但是selenium实话实说是有点慢,不太符合python的快速的性格,可以尝试用其他的自动化库。

你可能感兴趣的:(简单的selenium+python实现自动化打卡(手把手))