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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值