準備
- 進入終端,輸入
pip install requests,lxml
來下載requests爬蟲庫和lxml(呼叫xpath)模組。- 將你的電腦時間設定為正規時間
流程
使用session會話的方法登入learnku。
進入檢視目前時間的迴圈
判斷當前時間
18點到凌晨4點開啟夜間模式,其它時間開啟白天模式
1.登入learnku
由於learnku每隔24小時都會給我們的cookie和token進行一個小修改,所以我們就不用cookie登入法了,這裡我們就是用session來登入吧(賬號與密碼的辦法)。
如果想進一步地瞭解session和cookie,請參考python3下使用requests實現模擬使用者登入。
from lxml import etree
import requests
s = requests.Session() #斷點1
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; ) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.122 Safari/537.36'
}
s.headers.update(headers) #斷點2
text = s.get('https://learnku.com').text
html = etree.HTML(text)
login_token = html.xpath('//meta[@name="csrf-token"]/@content') #斷點3
payload = {
'_token':login_token,
'remember': 'yes',
'return_back': 'yes',
'username': '你的賬號名',
'password': '你的賬號密碼'
}
s.post('https://learnku.com/auth/login', data=payload) #斷點4
斷點1:建立一個session會話的物件。
斷點2:將session會話的user-agent設定為Mozilla/5.0 (Windows NT 6.1; ) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.122 Safari/537.36
,主要是為了反反爬。
斷點3:這段程式碼找出了登入介面所需要的引數token。
斷點4:對登入介面https://learnku.com/auth/login
進行請求(登入)。
對了,在呼叫切換白天/夜間模式之前,你還要找出使用session再一次找出新token。
token = html.xpath('//meta[@name="csrf-token"]/@content')
2.對切換白天/夜間模式介面進行請求
程式碼:
url = 'https://learnku.com/users/settings/night_mode'
data = {'_method':'POST',
'_token':token}
s.post(url,data=data)
3.datetime獲取當前時間
在無數的時間模組之間,datetime模組是讓我最滿意的。datetime是個內建模組,使用起來非常方便,所以我非常推薦大家學一學。如果你想進一步地瞭解datetime模組,不妨去看一下Python3標準庫大全之datetime教程。
回到我們的主題
首先,我們要匯入datetime模組。
import datetime
然後我們就可以弄個判斷時間的永遠迴圈了。
while True:
now = datetime.now()
hour = now.hour
text = s.get('https://learnku.com').text
html = etree.HTML(text)
day_or_night = html.xpath('/html[@lang="zh"]/@class')[0] #斷點
if hour > 18 or hour < 4:
if day_or_night == "":
s.post(url,data=data)
else:
if day_or_night == 'night-node':
s.post(url,data=data)
斷點:檢視當前的模式為白天還是夜間。
完整程式碼:
from lxml import etree
import requests
from datetime import datetime
s = requests.Session()
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; ) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.122 Safari/537.36'
}
s.headers.update(headers)
text = s.get('https://learnku.com').text
html = etree.HTML(text)
login_token = html.xpath('//meta[@name="csrf-token"]/@content')
payload = {
'_token':login_token,
'remember': 'yes',
'return_back': 'yes',
'username': 'Coolest',
'password': 'cool404learnku'
}
s.post('https://learnku.com/auth/login', data=payload)
text = s.get('https://learnku.com').text
html = etree.HTML(text)
token = html.xpath('//meta[@name="csrf-token"]/@content')
url = 'https://learnku.com/users/settings/night_mode'
data = {'_method':'POST',
'_token':token}
while True:
now = datetime.now()
hour = now.hour
text = s.get('https://learnku.com').text
html = etree.HTML(text)
day_or_night = html.xpath('/html[@lang="zh"]/@class')[0]
if hour > 18 or hour < 4:
if day_or_night == "":
print("夜間模式已開啟")
s.post(url,data=data)
else:
if day_or_night == 'night-node':
print("白天模式已開啟")
s.post(url,data=data)
本作品採用《CC 協議》,轉載必須註明作者和本文連結