Python爬虫实战_疫情打卡
前言
python这个语言易学简单,也可以利用其丰富的库写点东西.
所以我打算写个爬虫打卡(其实之前早就写过,不过已经忘干净了)
大概流程是 requests+selenium再加个图形界面tkinter或者pyqt
本来打算只使用requests get和post直接打卡的,试了很久都卡在原页面.
希望会的朋友留言帮帮忙.另外我试了试selenium的getcookie也未能成功
1.html解析
使用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
74import 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就行了
网上还有自动下载的代码。不过我懒得在这上面花时间了