吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 6767|回复: 32
收起左侧

[Python 转载] 青书学堂利用爬虫和selenium完成验证码登录获取cookie

  [复制链接]
xhtdtk 发表于 2021-3-17 23:59
本帖最后由 xhtdtk 于 2021-3-19 11:38 编辑

先说点别的
目前各大院校的作业又开始了,虽然可以直接利用cookie进行请求,但很多人不知道cookie是什么在哪里,所以还是通过模拟登录来而获取cookie
这是我睡下午觉突然想的方法,这个方法没参考过别人的文章,但是那么简单肯定有很多人知道或者在别的地方发表过,各位知道我不是盗版就好

1、请求的url和登录表单数据
#请求的urlhttps://www.qingshuxuetang.com/Login?_t=1615993555750
#登录表单数据

username: 1
password: 1
deviceInfoQS: {"netType":1,"appType":3,"clientType":3,"deviceName":"PCWeb","osVersion":"Win32","appVersion":"5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3776.400 QQBrowser/10.6.4212.400","imei":"","mac":"","idfa":""}
type: 3
sessionId: 02415a85-a8e2-4324-bfe4-2f973efc2321
userInput: 1
ref:


2、分析
请求的url_t为当前时间戳转换为毫秒
登录表单数据
usernamepassword分别为账号、密码
deviceInfoQS不知道是什么参数,可能与浏览器有关,无论登录成功与否都没有改变,是固定参数
typedeviceInfoQS一样,不知道是什么参数,但也是固定参数
sessionId不知道是什么参数,不是固定参数,但是可以从别的接口获取
userInput用户需要输入的验证码,与sessionId在同一接口
ref不知道是什么参数,一直是空值


3、根据分析,只要获取sessionIduserInput(验证码)就能完成登录
正常进入页面后在账号一行输入任意内容,便能获取一个POST的urlhttps://www.qingshuxuetang.com/Svc/GetValIDAtionCode?_t=1615995065065
需要提交的表单数据都是固定参数,再查看reponse的内容,正是需要的sessionId验证码图片的二进制流
搜索了一下如何用python将二进制流转换为图片,没有找到自己想要的,于是使用selenium来打开验证码图片,图片正常显示,用户就能根据图片输入验证码了


4、代码及获取cookie
import requests
import time
import datetime
from selenium import webdriver
from bs4 import BeautifulSoup
import re

#创建一个会话
s=requests.session()

#账号密码
username=input("输入账号:")
password=input("输入密码:")

#获取当前时间戳
t = time.time()
rnd = int(round(t * 1000))    #毫秒级时间戳

#获取session和图片验证
param={'_t': str(rnd)}
data_code={"recv": str(username),"validationType": 3}
rep_getcode=s.post('https://www.qingshuxuetang.com/Svc/GetValidationCode',params=param,json=data_code)
sessionId=rep_getcode.json()['data']['sessionId']
print(sessionId)
code='data:image/png;base64,'+rep_getcode.json()['data']['code']
driver=webdriver.Chrome()
driver.get(code)
userInput=input("输入验证码:")

data_login={
        'username': str(username),
        'password': str(password),
        'deviceInfoQS': '{"netType":1,"appType":3,"clientType":3,"deviceName":"PCWeb","osVersion":"Win32","appVersion":"5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3776.400 QQBrowser/10.6.4212.400","imei":"","mac":"","idfa":""}',
        'type': '3',
        'sessionId': str(sessionId),
        'userInput': str(userInput),
        'ref':''
}
rep_login=s.post('https://www.qingshuxuetang.com/Login?',params=param,data=data_login)
print(str(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'))+' 登录状态:'+rep_login.json()['message'])

num=0
for num_cookie in rep_login.cookies:
        if num == 0:
                cookie_1=re.findall('<Cookie (.*?) for',str(num_cookie))[0]
        if num == 1:
                cookie_2=re.findall('<Cookie (.*?) for',str(num_cookie))[0]
        num = num + 1

cookie=cookie_1+'; '+cookie_2
print(cookie)

代码写的比较粗糙,不过思路介绍完了,你们一定能写出一个比我更好的,
为什么不用def进行封装,我比较懒,写出来能用就行,打扰大家欣赏代码的雅兴了


QQ截图20210318000933.jpg

免费评分

参与人数 3吾爱币 +3 热心值 +3 收起 理由
tdjmcqw + 1 + 1 谢谢@Thanks!
赠柟 + 1 + 1 我很赞同!
hnwang + 1 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| xhtdtk 发表于 2021-4-21 13:25
csylyx 发表于 2021-4-21 09:31
大佬,可以帮挂一下吗?

私信发给我一下吧
linyii 发表于 2021-3-18 09:18
雾都孤尔 发表于 2021-3-18 00:12
xxxt 发表于 2021-3-18 00:29
刚好需要学习如何走验证码,感谢分享~
richens 发表于 2021-3-18 06:38
谢谢分享,学习一下!
wylksy 发表于 2021-3-18 07:41
首先感谢楼主的分享,其次一起学习一起进步。。。。最后遵守版规
lvcaolhx 发表于 2021-3-18 08:20
能详细介绍一下各参数是怎么找出来的吗?
dingding8208 发表于 2021-3-18 08:29
小白一个,完全没懂。。。我还在挂学时呢
Christia 发表于 2021-3-18 09:24
感觉不错,得好好学习下&#128524;
key_user 发表于 2021-3-18 09:34
感谢楼主分享,拿走了
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-1 07:01

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表