疫情打卡

Python爬虫实战_疫情打卡

前言

python这个语言易学简单,也可以利用其丰富的库写点东西.

所以我打算写个爬虫打卡(其实之前早就写过,不过已经忘干净了)

大概流程是 requests+selenium再加个图形界面tkinter或者pyqt

本来打算只使用requests get和post直接打卡的,试了很久都卡在原页面.

希望会的朋友留言帮帮忙.另外我试了试selenium的getcookie也未能成功

1.html解析

使用requests

Requests介绍

2.selenium

selenium-python中文文档 (python-selenium-zh.readthedocs.io)

使用selenium自动化

例子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
import time
from selenium.webdriver.common.keys import Keys
import json
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
#
# option = Options()
# option.add_argument("--headless")
driver = webdriver.Chrome()

login_url = "http://yqtb.nwpu.edu.cn/wx/xg/yz-mobile/index.jsp"

# 读取cookie
driver.get(login_url)
# print(driver.get_cookies())
# print(driver.get_cookie('domain'))
with open('campus_Cookie.txt', 'r+', encoding='utf-8') as f:
try:
listCookies = json.loads(f.read())
for cookie in listCookies:
driver.add_cookie({
# "domain": cookie['domain'],
"httpOnly": cookie["httpOnly"],
"name": cookie["name"],
"path": cookie['path'],
"secure": cookie['secure'],
"value": cookie["value"]
}
)
except json.decoder.JSONDecodeError:
print('空的cookie文件')
driver.get(login_url)
driver.refresh()
# 登陆

time.sleep(2)
name = driver.find_element_by_id('username')
name.send_keys(input("输入学号:\n"))
password = driver.find_element_by_id('password')
password.send_keys(input("输入密码:\n"))
password.send_keys(Keys.RETURN)
while '西北工业大学 | 统一身份认证 | 登录' in driver.page_source:
print("密码错误\n请再次输入\n")
name = driver.find_element_by_id('username')
name.clear()
name.send_keys(input("输入学号:\n"))
password = driver.find_element_by_id('password')
password.clear()
password.send_keys(input("输入密码:\n"))
password.send_keys(Keys.RETURN)
# 保存cookie
cookie = driver.get_cookies()
jsonCookies = json.dumps(cookie)
with open('campus_Cookie.txt', 'w+') as f:
f.write(jsonCookies)

#填报
fill_form = driver.find_element_by_class_name('icon-shangbao1').click()

#提交

submit = driver.find_element_by_link_text('提交填报信息').click()

submit = driver.find_element_by_xpath('//*[@id="qrxx_div"]/div[2]/div[25]/label/div[1]/i').click()

#保存
save = driver.find_element_by_id('save_div').click()

#保存cookie
driver.close()

# driver.window_handles()
# def log_in():

cookie功能没法用,有知道的朋友麻烦留言告诉我一下

这个cookie怎么添加之后进入打卡页面

3.图形界面(其实这并不重要)

鉴于PyQt的上手难度,我用的tkinter(python自带的)

推荐一本学tkinter的书,《Python GUI设计:tkinter菜鸟编程》台湾人写的,大概一周能好好看完(有基础两三天就行)

后记

之前写过一个打卡的程序

但是用的chromedriver版本低了(主要是浏览器升级得太快),我以为就没法用了

但是只要新下载一个版本得driver就行了

网上还有自动下载的代码。不过我懒得在这上面花时间了

-------------本文结束感谢您的阅读-------------
感谢阅读.

欢迎关注我的其它发布渠道