模擬登陸思路
通過selenium中的webdriver控制瀏覽器登錄目標網站,然后獲取模擬登陸需要的Cookie,再利用此Cookie來達到登錄的效果。本次我們使用webdriver來驅動火狐瀏覽器插件。在登錄網站時,cookie保存在發起請求的客戶端中,網站服務器利用cookie來區分不同的客戶端。cookie里面記錄了“訪問登錄后才能看到的頁面”這一行為的信息,含有能夠向服務器證明:“我剛才登錄過”。因此cookie可以用來標識客戶端的身份,以存儲它的信息。
登錄步驟
導入模塊
1 from selenium import webdriver 2 import requests 3 import json
啟動瀏覽器
通過webdriver驅動火狐瀏覽器,然后在加載將要訪問的目標網站
1 driver = webdriver.Firefox() 2 driver.get('目標網站')
點擊登錄
找到網頁中登錄按鈕所在的位置,通過瀏覽器模擬點擊打開登錄框,然后找到用戶名和密碼框的位置,輸入用戶名及密碼,在尋找按鈕以及密碼輸入框時可鼠標右鍵然后找到“查看元素”選項,點擊之后可在網頁源碼中尋找。
代碼如下:
1 #清空登錄框 2 driver.find_element_by_xpath("./*//input[@name='username']").clear() 3 #自動填入登錄用戶名 4 driver.find_element_by_xpath("./*//input[@name='username']").send_keys(user) 5 #清空密碼框 6 driver.find_element_by_xpath("./*//input[@name='password']").clear() 7 #自動填入登錄密碼 8 driver.find_element_by_xpath("./*//input[@name='password']").send_keys(password) 9 time.sleep(8) 10 #點擊登錄按鈕進行登錄 11 driver.find_element_by_xpath("./*//button[@name='loginsubmit']").click() 12 time.sleep(10)
記錄cookie
經過上面幾步,如果沒有報錯的話就說明已經登錄成功了,接下來我們再次加載網頁獲取登錄cookie。
代碼如下:
1 driver.get('目標網站') 2 #獲取cookies 3 cookie_items = driver.get_cookies() 4 for cookie_item in cookie_items: 5 post[cookie_item['name']] = cookie_item['value'] 6 cookie_str = json.dumps(post) 7 with open('cookie.txt', 'w', encoding='utf-8') as f: 8 f.write(cookie_str) 9 f.close()
通過cookie登錄
獲得cookie之后,模擬登陸就跟之前一樣用requests請求網站,只需要將cookie內容加到請求中即可。
代碼如下:
1 header = {"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64;rv:53.0) Gecko/20100101 Firefox/53.0"} 2 with open('cookie.txt', 'r', encoding='utf-8') as f: 3 cookie = f.read() 4 cookies = json.loads(cookie) 5 res = requests.get(url=url, cookies=cookies, headers=header)
對於有些網站來說,cookie的生命期較長,所以在第一次登陸獲取cookie后,在以后模擬登陸時只需要調用此cookie即可,十分方便。
具體代碼如下:
1 from selenium import webdriver 2 import time 3 import json 4 5 user="用戶名" 6 password="密碼" 7 8 driver = webdriver.Firefox() 9 driver.get('目標網站') 10 time.sleep(5) 11 driver.find_element_by_xpath("./*//button[@type='submit']").click() 12 print("正在輸入用戶名和密碼") 13 #清空登錄框 14 driver.find_element_by_xpath("./*//input[@name='username']").clear() 15 #自動填入登錄用戶名 16 driver.find_element_by_xpath("./*//input[@name='username']").send_keys(user) 17 #清空密碼框 18 driver.find_element_by_xpath("./*//input[@name='password']").clear() 19 #自動填入登錄密碼 20 driver.find_element_by_xpath("./*//input[@name='password']").send_keys(password) 21 22 time.sleep(8) 23 #點擊登錄按鈕進行登錄 24 driver.find_element_by_xpath("./*//button[@name='loginsubmit']").click() 25 time.sleep(10) 26 driver.get('目標網站') 27 #獲取cookies 28 cookie_items = driver.get_cookies() 29 30 #獲取到的cookies是列表形式,將cookies轉成json形式並存入本地名為cookie的文本中 31 for cookie_item in cookie_items: 32 post[cookie_item['name']] = cookie_item['value'] 33 cookie_str = json.dumps(post) 34 with open('cookie.txt', 'w', encoding='utf-8') as f: 35 f.write(cookie_str) 36 f.close() 37 print("登錄完成")
