DrissionPage采集京东系列——自动化登录

登录流程

  • 一级目录
    • 二级目录
    • 前言
    • 1、流程分析
      • [1.1 滑块验证](#1.1 滑块验证)
        • [1.1.1 识别滑块距离](#1.1.1 识别滑块距离)
        • [1.1.2 生成滑动轨迹](#1.1.2 生成滑动轨迹)
        • [1.1.3 模拟拖动滑块](#1.1.3 模拟拖动滑块)
      • [1.2 短信登录](#1.2 短信登录)
        • [1.1.1 滑块验证](#1.1.1 滑块验证)
        • [1.1.2 短信验证](#1.1.2 短信验证)
      • [1.3 密码登录](#1.3 密码登录)
    • 小结

一级目录

二级目录

三级目录

前言

本系列介绍了如何使用DrissionPage库自动化操作,包括模拟搜索、登录验证、动态页面滑动抓取,以及从商品列表中提取标题、价格等信息,详细展示了如何完成京东商品数据及评论数据的抓取,本篇文章只介绍登录相关

1、流程分析

打开京东登录页面发现有三种登录方式,如下图

这里只介绍短信登录密码登录两种方式,其实两种登录方式流程基本一致,短信验证多了一个验证码处理的步骤,我们挨个介绍两种登录方式,因为两种方式都涉及到了滑块验证,所以就线介绍下滑块验证的流程

1.1 滑块验证

1.1.1 识别滑块距离

判断出现滑块后,直接用DrissionPage获取背景图片滑块的base64字符串,这里有两个小细节需要注意一下,一是两种登录方式的图片背景CSS结构不同,二是滑块不是100%出现,需要代码里判断

python 复制代码
bk_selector = 'css:#content div.JDJRV-bigimg > img'
slide_selector = 'css:#content div.JDJRV-smallimg > img'
bk_base64 = page.ele(bk_selector).attr('src')
slide_base64 = page.ele(slide_selector).attr('src')

base64 字符串解码保存为图片,使用 链接: ddddocr 识别滑块缺口距离,这种方式得到的距离值可能需要微调

滑块图

背景图

python 复制代码
    det = ddddocr.DdddOcr(det=False, ocr=False)
    
    with open('target.png', 'rb') as f:
        target_bytes = f.read()
    
    with open('background.png', 'rb') as f:
        background_bytes = f.read()
    
    res = det.slide_match(target_bytes, background_bytes)
    
    print(res)
1.1.2 生成滑动轨迹

获取到滑块缺口距离后,就可以生成滑块轨迹了

python 复制代码
    def get_tracks(self, distance):
        """滑块的运动轨迹"""
        value = round(random.uniform(0.55, 0.75), 2)
        v, t, sum = 0, 0.3, 0
        plus = []
        mid = distance * value
        while sum < distance:
            if sum < mid:
                a = round(random.uniform(2.5, 3.5), 1)
            else:
                a = -round(random.uniform(2.0, 3.0), 1)
            s = v * t + 0.5 * a * (t ** 2)
            v = v + a * t
            sum += s
            plus.append(round(s))

        reduce = [-6, -4, -6, -4]
        return {'plus': plus, 'reduce': reduce}
1.1.3 模拟拖动滑块

这里直接给出代码

python 复制代码
slide_ele = page.ele(slide_btn_selector)
        page.actions.hold(slide_ele)  # 此方法用于按住鼠标左键不放,按住前可先移动到元素上
        # 使鼠标相对当前位置移动若干距离
        for track in tracks['plus']:
            page.actions.move(offset_x=track, offset_y=round(random.uniform(1.0, 3.0), 0), duration=.05)
        time.sleep(random.uniform(0.5, 0.7))
        page.actions.release(slide_ele)  # 此方法用于释放鼠标左键,释放前可先移动到元上。

我也是参考了模拟滑块滑动,感兴趣的可以去阅读一下

1.2 短信登录

1.1.1 滑块验证

跳转到滑块验证章节

1.1.2 短信验证

滑块验证通过之后就是验证码处理了,这里就不得不提到SmsForwarder-短信转发器,借助这款工具可以将登陆接收到的短信上传到REDIS,从而实现验证码的自动化处理。另外SmsForwarder不仅只转发短信,还可以监控Android手机短信、来电、APP通知,并根据指定规则转发到其他手机:钉钉群自定义机器人、钉钉企业内机器人、企业微信群机器人、企业微信应用消息、飞书群机器人、飞书企业应用、邮箱、bark、webhook、Tele****机器人、Server酱、PushPlus、手机短信等。

想了解更多详情请跳转SmsForwarder-短信转发器

1.3 密码登录

密码登录流程和短信登录流程大体一致,相比短信登录少了一个验证码处理,其他都是相同的

小结

京东登录滑块的风控策略宽松的有故意放水的嫌疑,详情页的滑块就非常难搞,同志们有兴趣的滴滴我一起探讨,平台比较敏感,这里就不放源码了,后续会更新详情页和评论的采集

相关推荐
荣--5 小时前
一键部署不是为了省时间 —— 它是把"买来的 PaaS"变成"自己的平台"的拐点
运维·zabbix·工程化·一键部署·平台化·边界设计
江华森5 小时前
动手实战学 Docker — 从零到集群编排完全指南
运维
Avan_菜菜21 小时前
FRP 内网穿透完整实战:从 HTTP 映射到 HTTPS 自签代理
运维·nginx·https
SelectDB2 天前
Litefuse 开源并推出单进程轻量模式,25 秒就能跑起来的 Agent 可观测与评估平台
运维·后端·自动化运维
XIAOHEZIcode3 天前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
用户0328472220704 天前
如何搭建本地yum源(上)
运维
大树887 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠7 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质7 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
Inhand陈工7 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信