首页 > 其他分享 >通过requests登录店小秘解决验证码问题

通过requests登录店小秘解决验证码问题

时间:2022-12-18 12:22:44浏览次数:54  
标签:www code 店小秘 验证码 headers cookie dianxiaomi print requests

登录常用手段就是:

  • request.post请求
  • selenium等自动化工具

这里讲一下使用requests实现自动登录
网站

 

现在网站登录基本上都有验证码,requests登录的难点在于将验证码与账号联系起来,这里是cookie和referer。

def login_dianxiaomi():

"""

店小秘

将code与账号联系起来的纽带就在cookie和referer,需要考虑登录主页,code获取和登录ajax三方

"""

i = 0

while i < 3:

ts = int(time.time())

homepage = f'https://www.dianxiaomi.com/index.htm?ts={ts}' # 主页,这里作为后面的referer

headers = {

'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',

'Accept-Encoding': 'gzip, deflate, br',

'Accept-Language': 'zh-CN,zh;q=0.9',

'Cookie': '_dxm_ad_client_id=C480E8334FD936CCDEB3BA1AD1F98E49F; Hm_lvt_f8001a3f3d9bf5923f780580eb550c0b=1670383137,1670400951; '

'JSESSIONID=857D325C586104913A42E668792A8870; dxm_vc=NjlhZDZiOGYwMzk0YzdiYjRlOWJlY2M2OWJiMGY4Y2MhMTY3MDQwMzcxMzg2NQ; '

'Hm_lpvt_f8001a3f3d9bf5923f780580eb550c0b=1670403714', # 直接网页复制获取

'Host': 'www.dianxiaomi.com',

'Referer': 'https://www.dianxiaomi.com/home.htm',

'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36'

}

res = requests.get(homepage, headers=headers, timeout=30)

cookie = res.cookies.items()

jsessionid = cookie[0][1]

print('homepage jsessionid:', jsessionid)

# 获取验证码

url = f'https://www.dianxiaomi.com/verify/code.htm?t={int(time.time() * 1000)}'

headers = {'Accept': 'image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8',

'Accept-Encoding': 'gzip, deflate, br',

'Accept-Language': 'zh-CN,zh;q=0.9',

'Cookie': '_dxm_ad_client_id=C480E8334FD936CCDEB3BA1AD1F98E49F; Hm_lvt_f8001a3f3d9bf5923f780580eb550c0b=1670383137,1670400951;'

f'Hm_lpvt_f8001a3f3d9bf5923f780580eb550c0b=1670402174; JSESSIONID={jsessionid}; ' # 这里的jessionid来自主页cookie

'dxm_vc=NjlhZDZiOGYwMzk0YzdiYjRlOWJlY2M2OWJiMGY4Y2MhMTY3MDQwMzcxMzg2NQ',

'Host': 'www.dianxiaomi.com',

'Referer': f'https://www.dianxiaomi.com/index.htm?ts={ts}',

'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36'

}

res = requests.get(url, headers=headers, timeout=30)

cookie = res.cookies.items()

print('code cookie:', cookie)

if len(cookie) == 1:

i += 1

print('code url cookie not right', f'try {i} times')

continue

code_jsessionid = cookie[0][1]

code_dxm_vc = cookie[1][1]

with open('dianxiaomi.png', 'wb') as f:

f.write(res.content)

# 图像二值化

im = Image.open('dianxiaomi.png')

img_gray = im.convert('L')

img_gray.save('dianxiaomi.png')

code = get_code('dianxiaomi.png')

print('code:', code)

login_url = 'https://www.dianxiaomi.com/user/userLoginNew2.json'

headers = {

'Accept': 'application/json, text/javascript, */*; q=0.01',

'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',

'X-Requested-With': 'XMLHttpRequest',

'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36',

'Referer': f'https://www.dianxiaomi.com/index.htm?ts={ts}',

'Accept-Encoding': 'gzip, deflate, br',

'Accept-Language': 'zh-CN,zh;q=0.9',

'Cookie': '_dxm_ad_client_id=C480E8334FD936CCDEB3BA1AD1F98E49F; Hm_lvt_f8001a3f3d9bf5923f780580eb550c0b=1670383137,1670400951; '

f'Hm_lpvt_f8001a3f3d9bf5923f780580eb550c0b=1670402174; JSESSIONID={code_jsessionid}; ' # 这里的jessionid和dxm_vc来自请求code的cookie

f'dxm_vc={code_dxm_vc}'

}

data = {

'account': 'xx',

'password': 'xxx',

'dxmVerify': code,

'loginVerifyCode': '',

'remeber': 'remeber',

'url': ''

}

response = requests.post(login_url, data=data, headers=headers, timeout=30)

print(response.text)

# if '有用户在其它地方,登录此账号' in response.text:

# print('有用户在其它地方,登录此账号')

# return

res = response.json()

if res['code'] == -1:

i += 1

print(res['error'], f'try {i} times')

continue

else:

# 获取requests请求返回的cookie

cookie = response.cookies.items()

print(cookie)

cookies = ''

for c in cookie:

cookies += c[0] + '=' + c[1] + ';'

print(11, cookies)

return cookies

 

欢迎关注,爬虫王者

标签:www,code,店小秘,验证码,headers,cookie,dianxiaomi,print,requests
From: https://www.cnblogs.com/crawler-king/p/16990128.html

相关文章

  • 通过requests登录店小秘ERP解决验证码问题
    登录常用手段就是:request.post请求selenium等自动化工具这里讲一下使用requests实现自动登录现在网站登录基本上都有验证码,requests登录的难点在于将验证码与账......
  • Selenium21--验证码测试
    验证码简介有些网站需要验证码通过后方可进入网页,目的很简单,就是区分是自然人访问还是计算机程序访问。验证码:简称为captcha一种随机生成的信息(数字、字母、汉字、......
  • pip配环境变量+pip安装requests
    1.为在终端的任意路径使用pip,需要配置环境变量:我的电脑->属性->高级系统设置->环境变量->Path->加入pip.exe在的路径C:\Users\lenovo\AppData\Local\Programs\Python\Pyth......
  • .NET 6 实现滑动验证码(五)、验证码设置与缓存
    这一节,我们在Constant目录中,定义两个类CaptchaOptions.cs与CaptchaTypeConstant。目的是设置验证码的类型与其他一些属性。然后在Storage目录中,设置验证码的缓存数据。上......
  • 验证码案列的代码实现和细节处理
    代码实现:login.jsp<%@pagecontentType="text/html;charset=UTF-8"language="java"%><html><head><title>login</title><script>window.onload......
  • 海量数据、广泛适配、产品稳定,极验三大独有能力打造差异化验证码产品
    引言:深耕交互安全这一细分领域十年,极验在十年间服务36万客户,自全球124个国家与地区的客户端用户都曾使用过极验的产品。极验在银行、金融证券和航空出行等10个细分行业的平......
  • session特点以及验证码案列的需求和分析
    session特点以及验证码案列的需求和分析session的特点:1.session用于存储一次会话的多次请求的数据,存在服务器端2.session可以存储任意类型,任意大小的数据session与......
  • 智勇三国生成验证码的程序,欢迎指教
    ​​智勇三国​​生成验证码的程序,欢迎指教。 思路如下:一,取得桌面DC。二,计算位置。三,建立内存DC和位图并填充背景。四,每个字输出到DC上,上下随机偏移0到4并倾斜。五,......
  • Python requests.post 发送中文 'latin-1' codec can't encode characters in positio
    headers={"Content-type":"application/json;charset=utf-8","Authorization":"bearer"+token}data={#上游任务id名称'upstreamTaskI......
  • requests模块
    requests.get/post(url,params,data,headers,timeout,verify,allow_redirects,cookies)url:要下载的目标网页的URLparams:字典形式,设置URL后面的参数,比如?id=123&name=donf......