python+selenium获取cookie session_Python Selenium模拟登录成功后,使用此cookie、利用requests库进行get时,提示“非法登陆”。...
一. 步驟概述
a. 模擬登錄學校選課系統(使用Selenium庫登陸http://xk.suibe.edu.cn/xsxk/login.xk)
b. 取得cookie后傳入requests的session中。(參考博客:https://blog.csdn.net/big__v/article/details/78151940)
c. 使用requests庫中的post提交選課序號至http://xk.suibe.edu.cn/xsxk/xkOper.xk
d. 完成選課
二. 手動登錄時瀏覽器截圖(Chrmoe)
1. 登錄時request headers(這里有一個cookie就是之后會出錯的地方。)
2. 登錄時post
三. 出錯情況概述
1. 如果手動用瀏覽器登錄并復制上述cookie直接進入get的headers里,get命令能夠成功完成,并提示選課成功。
2. 如果把手動用瀏覽器登錄這一步用Selenium模擬登錄代替,并直接將cookies傳入requests的session中,再次嘗試gett就會報出“非法進入”。
四. 問題排除
1. 第二步get推測沒有問題,因為復制瀏覽器中cookie直接進入get的headers里,post命令能夠成功完成。
2. 不是cookie格式問題,因為格式問題會導致報錯“登錄過期”,而不是“非法登錄”。
五. 問題猜測
猜測可能cookie進行過加密
猜測存在其他反爬蟲手段
猜測cookie存在時效性
六. 完整代碼如下
# -*- coding:utf-8 -*-
from selenium import webdriver
import requests
from selenium.webdriver.support.wait import WebDriverWait
# 添加選課序號
codes = []
while True:
code = raw_input(u'請輸入選課序號(輸入回車結束):')
if code != '':
codes.append(code)
else:
break
# 開始登錄
driver = webdriver.Chrome()
url = "http://xk.suibe.edu.cn/xsxk/login.xk"
s = requests.session()
while True:
driver.get(url)
name_input = driver.find_element_by_id('username') # 找到用戶名的框框
pass_input = driver.find_element_by_id('password') # 找到輸入密碼的框框
login_button = driver.find_element_by_xpath('//*[@id="loginForm"]/table/tbody/tr[4]/td[2]/input[1]')
name_input.clear()
name_input.send_keys('1*******') # 填寫用戶名
pass_input.clear()
pass_input.send_keys('********') # 填寫密碼
WebDriverWait(driver, 300000000).until_not(lambda x: x.find_element_by_id("verifyCode").is_displayed()) # 等待直到登錄成功
if u'夜大學' in driver.page_source:
print u"登錄成功!"
selenium_cookies = driver.get_cookies() # 把selenium獲取的cookies保存到變量,備用。
# print(selenium_cookies)
driver.close()
break
else:
driver.close()
# 處理cookie
s = requests.Session()
for i in selenium_cookies:
requests.utils.add_dict_to_cookiejar(s.cookies, {i['name']: i['value']})
# 以下用post提交選課
for code in codes:
info = {'method': 'handleQxgxk',
'jxbid': '201820191' + code,
'glJxbid': '',
'xyjc': ''}
r = s.get('http://xk.suibe.edu.cn/xsxk/xkOper.xk', params=info)
if 'false' in r.text:
print '選課序號:%s,選課失敗。' % code, r.text
else:
print '選課序號:%s,選課成功。' % code
總結
以上是生活随笔為你收集整理的python+selenium获取cookie session_Python Selenium模拟登录成功后,使用此cookie、利用requests库进行get时,提示“非法登陆”。...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 红帽linux6的版本号,RedHat
- 下一篇: 大专学的pHp找什么工作,大专毕业能做什