1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 最简单的易班打卡脚本

最简单的易班打卡脚本

时间:2024-03-09 20:13:45

相关推荐

最简单的易班打卡脚本

最简单的易班打卡脚本

易班web自动化打卡脚本分析实现过程环境搭建定位元素获取cookies使用cookies定时启动脚本完整代码

易班web自动化打卡脚本

一直以来,易班打卡被称为最鸡肋,最浪费时间,最浪费纳税人钱财的表面工程,那么如何解决这一问题,已成为现在高校大学生的急需思考的大问题。那这一次我就来谈谈我是怎么解决这一问题的。

分析

众所周知,学生虽然使用较多的是易班APP,但是,善良的易班还做了网页端。刚好前不久我学习了一点儿web自动化技术,正好拿来练练手。

先来看看易班的登录界面,它使用了验证码,然而,图形验证码就是专门克制机器操作的,所以验证码只能使用人为识别。那该如何实现自动登录呢?

我们发现,登录一次之后,再次打开页面就会自动登录,原来易班记录了用户的cookies。

没错,你猜对了!我就是保存cookies,每次登录都更换cookies,以实现多用户登录打卡。

实现过程

环境搭建

网上有很多webdriver环境搭建的教程,我就不再啰嗦了

定位元素

使用google浏览器复制的full xpath

driver.find_element_by_xpath("/html/body/div1/div/div[2]/div1").click()

通过full xpath查找网页元素,并且执行点击操作;

driver.find_element_by_id(“account-txt”).send_keys("*****")

通过id查找网页元素,并且执行输入操作;

会用这两个方法就够了(这也太low了)

获取cookies

一段非常简单的代码,跑跑看

import selenium.webdriverimport timeimport jsonlst[] = ["",""] # 分别填上账号和密码driver = selenium.webdriver.Chrome()driver.implicitly_wait(10)driver.get("/")driver.delete_all_cookies() # 删除已有cookiesprint("登录过程需要手动输入验证码")time.sleep(1)driver.get("/login?go=http%3A%2F%%2F") # 进入登录界面driver.find_element_by_id("account-txt").send_keys(lst[0])driver.find_element_by_id("password-txt").send_keys(lst[1])driver.find_element_by_id("login-btn").click()print("登录过程可能需要手动输入验证码\n完成登录后,键入y,开始提取用户cookies\n无法登录情况下,键入n或其他任意字符,跳过此次提取")dd = input("是否完成登录?(y/n)")if(dd == 'y'):cookies = driver.get_cookies()print("已获取cookies")jsoncookies = json.dumps(cookies)# 将cookies保存到cookies.txt中with open("cookies.txt", "a+")as f:ss = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time()))f.write("\n"+ss+"#"+str(lst[0])+"#"+str(lst[1])+"#"+"cookies--->"+jsoncookies)print("cookies已添加在cookies.txt!")else:print("未提取cookies,并跳过此用户")driver.quit()

使用cookies

import selenium.webdriverimport timeimport jsondriver = selenium.webdriver.Chrome()driver.get("/")driver.implicitly_wait(8)time.sleep(2)line = input("请输入cookies:")cookies = json.loads(line)driver.delete_all_cookies()driver.get("/")for co in cookies:driver.add_cookie(co)driver.get("/iapp659175")

定时启动脚本

假设看到这的小伙伴已经写好了完整代码,现在开始用服务器定时启动打卡脚本

crontab -e

3 6,11,17 * * * /usr/bin/python /home/yiban/yibandaka.py >> /www/wwwroot/mblog.ren/submit/yiban/run_log.txt 2>&1

每天的6点、11点、17点的03分开始执行脚本,并将记录保存在run_log.txt

完整代码

代码写的比较随意,将就一下吧!

下面代码是直接从服务器拷贝过来的,用电脑的话,需要稍作修改

import selenium.webdriverimport timeimport randomimport jsonimport requestsdef daka(Tim,TempList):# 服务器上要使用绝对路径,电脑是可以用相对路径;cookies_list.txt保存了用户cookies,每行一个cookies,比如:三个人就是三行cookieswith open("/home/yiban/cookies_list.txt", "r", encoding="utf-8")as fl:kk = 0dd = 0lst=[]# 以下配置用于服务器,电脑可使用下方注释的的代码option =selenium.webdriver.ChromeOptions()option.add_argument('--no-sandbox')option.add_argument('--headless')driver = selenium.webdriver.Chrome(executable_path='/home/software/chromedriver', chrome_options=option) # 注意path,我这里是chromedriver放在/home/apk/chromedriverdriver.get("/")driver.implicitly_wait(6)# 以下配置用于电脑,服务器可使用上方的的代码# driver = selenium.webdriver.Chrome()# driver.get("/")# driver.implicitly_wait(6)for line in fl.readlines():if(dd == 8):print("| The website of yiban maybe have some problem !")breakkk = kk + 1cookies = json.loads(line)print("| %d Replace login cookies!\t" %kk , end="")driver.delete_all_cookies()driver.get("/")for co in cookies:driver.add_cookie(co)try:driver.get("/iapp659175")time.sleep(0.5)if(Tim == 1):driver.find_element_by_xpath("/html/body/div[1]/div/div[2]/div[1]").click() #google浏览器复制的full xpath,下面都是time.sleep(0.5)driver.find_element_by_xpath("/html/body/div[1]/div/div[5]/div/div[2]/div[1]/div/input").clear()tmp=TempList[random.randint(0,2)]driver.find_element_by_xpath("/html/body/div[1]/div/div[5]/div/div[2]/div[1]/div/input").send_keys(tmp)driver.find_element_by_xpath("/html/body/div[1]/div/div[5]/div/div[2]/div[3]/input").click()driver.find_element_by_xpath("/html/body/div[1]/div/div[5]/div/div[2]/div[4]/span").click()elif(Tim == 2):driver.find_element_by_xpath("/html/body/div[1]/div/div[2]/div[2]").click()time.sleep(0.5)driver.find_element_by_xpath("/html/body/div[1]/div/div[5]/div/div[2]/div[1]/div/input").clear()tmp=TempList[random.randint(0,2)]driver.find_element_by_xpath("/html/body/div[1]/div/div[5]/div/div[2]/div[1]/div/input").send_keys(tmp)driver.find_element_by_xpath("/html/body/div[1]/div/div[5]/div/div[2]/div[3]/input").click()driver.find_element_by_xpath("/html/body/div[1]/div/div[5]/div/div[2]/div[4]/span").click()elif(Tim == 3):driver.find_element_by_xpath("/html/body/div[1]/div/div[2]/div[3]").click()time.sleep(0.5)driver.find_element_by_xpath("/html/body/div[1]/div/div[5]/div/div[2]/div[1]/div/input").clear()tmp=TempList[random.randint(0,2)]driver.find_element_by_xpath("/html/body/div[1]/div/div[5]/div/div[2]/div[1]/div/input").send_keys(tmp)driver.find_element_by_xpath("/html/body/div[1]/div/div[5]/div/div[2]/div[3]/input").click()driver.find_element_by_xpath("/html/body/div[1]/div/div[5]/div/div[2]/div[4]/span").click()except:dd = dd + 1print("%d execution failure! %d" % (kk,dd))lst.append(line)else:print("%d execution successful!" % kk)driver.quit()# 打卡失败者重新打卡if(lst and dd < 8):print("|++++++++++++++++++Failure re-execution++++++++++++++++++")jj = 0time.sleep(3)# 注意这里配置是服务器,电脑需要更换这里的配置option =selenium.webdriver.ChromeOptions()option.add_argument('--no-sandbox')option.add_argument('--headless')driver = selenium.webdriver.Chrome(executable_path='/home/software/chromedriver', chrome_options=option)driver.get("/")driver.implicitly_wait(6)# time.sleep(1)for lst1 in lst:jj = jj + 1cookies = json.loads(lst1)print("|+ %d Replace login cookies!\t" %jj, end="")driver.delete_all_cookies()driver.get("/")for co in cookies:driver.add_cookie(co)try:driver.get("/iapp659175")time.sleep(1)if(Tim == 1):driver.find_element_by_xpath("/html/body/div[1]/div/div[2]/div[1]").click()time.sleep(0.5)driver.find_element_by_xpath("/html/body/div[1]/div/div[5]/div/div[2]/div[1]/div/input").clear()tmp=TempList[random.randint(0,2)]driver.find_element_by_xpath("/html/body/div[1]/div/div[5]/div/div[2]/div[1]/div/input").send_keys(tmp)driver.find_element_by_xpath("/html/body/div[1]/div/div[5]/div/div[2]/div[3]/input").click()driver.find_element_by_xpath("/html/body/div[1]/div/div[5]/div/div[2]/div[4]/span").click()elif(Tim == 2):driver.find_element_by_xpath("/html/body/div[1]/div/div[2]/div[2]").click() time.sleep(0.5)driver.find_element_by_xpath("/html/body/div[1]/div/div[5]/div/div[2]/div[1]/div/input").clear()tmp=TempList[random.randint(0,2)]driver.find_element_by_xpath("/html/body/div[1]/div/div[5]/div/div[2]/div[1]/div/input").send_keys(tmp)driver.find_element_by_xpath("/html/body/div[1]/div/div[5]/div/div[2]/div[3]/input").click()driver.find_element_by_xpath("/html/body/div[1]/div/div[5]/div/div[2]/div[4]/span").click()elif(Tim == 3):driver.find_element_by_xpath("/html/body/div[1]/div/div[2]/div[3]").click()time.sleep(0.5)driver.find_element_by_xpath("/html/body/div[1]/div/div[5]/div/div[2]/div[1]/div/input").clear()tmp=TempList[random.randint(0,2)]driver.find_element_by_xpath("/html/body/div[1]/div/div[5]/div/div[2]/div[1]/div/input").send_keys(tmp)driver.find_element_by_xpath("/html/body/div[1]/div/div[5]/div/div[2]/div[3]/input").click()driver.find_element_by_xpath("/html/body/div[1]/div/div[5]/div/div[2]/div[4]/span").click()except:print("+ %d execution failure!" %jj)else:print("+ %d execution successful" %jj)driver.quit() if __name__ == "__main__":ss = time.strftime("%Y/%m/%d %H:%M:%S", time.localtime(time.time()))print(" _______________________________________________________")print("|-----------------" + ss + "------------------")ss = time.strftime("%H", time.localtime(time.time()))# 判断打卡时间,分别是6点,11点,17点if(ss == "06"):daka(1,["36.6","36.7","36.8"])elif(ss == "11"):daka(2,["36.7","36.8","36.9"])elif(ss == "17"):daka(3,["36.6","36.7","36.8"])ss = time.strftime("%Y/%m/%d %H:%M:%S", time.localtime(time.time()))print("|_________________" + ss + "_______________over\n")

获取cookies脚本

import selenium.webdriverimport timeimport jsondriver = selenium.webdriver.Chrome()driver.implicitly_wait(10)driver.get("/")driver.delete_all_cookies()# shuzu.txt是用来存放账号和密码的,一行一个账号和密码,账号和密码用逗号隔开fs = open('shuzu.txt', 'r')num = fs.readlines()if len(num) <= 0:print("无内容")else:for i in num:driver.delete_all_cookies()time.sleep(1)driver.get("/")time.sleep(3)driver.delete_all_cookies()driver.get("/login?go=http%3A%2F%%2F")lst = i.strip().split(",")driver.find_element_by_id("account-txt").send_keys(lst[0])driver.find_element_by_id("password-txt").send_keys(lst[1])driver.find_element_by_id("login-btn").click()print("登录过程可能需要手动输入验证码\n完成登录后,键入y,开始提取用户cookies\n无法登录情况下,键入n或其他任意字符,跳过此次提取")dd = input("是否完成登录?(y/n)")if(dd == 'y'):time.sleep(1)cookies = driver.get_cookies()jsoncookies = json.dumps(cookies)with open("cookies.txt", "a+")as f:ss = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time()))f.write("\n"+ss+"#"+str(lst[0])+"#"+str(lst[1])+"#"+"cookies--->"+jsoncookies)print("cookies已添加在cookies.txt!")else:print("未提取cookies,并跳过此用户")fs.close()driver.quit()

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。