本文章大约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
- selemium是实现自动化很强大的一个库,不仅仅是python,java也可以使用。
- time包是因为要使用sleep,毕竟你0.00001s干完所有操作很危险的。
- requests爬虫必备。
- xlrd pandas numpy ,python对excel文件的处理,可以通过很多方式实现,推荐pandas进行读写文件,xlrd对excel文件的处理也有着优势,但pandas对数据的提取挖掘能力更强悍。
- 对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的快速的性格,可以尝试用其他的自动化库。