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 密码登录

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

小结

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

相关推荐
Kaede633 分钟前
如何应对Linux云服务器磁盘空间不足的情况
linux·运维·服务器
Kookoos4 小时前
Dynamics 365 Finance + Power Automate 自动化凭证审核
运维·自动化·dynamics 365·power automate
努力学习的小廉7 小时前
深入了解linux系统—— 进程池
linux·运维·服务器
秃头菜狗7 小时前
各个主要目录的功能 / Linux 常见指令
linux·运维·服务器
jiunian_cn9 小时前
【Linux】centos软件安装
linux·运维·centos
藥瓿亭9 小时前
K8S认证|CKS题库+答案| 6. 创建 Secret
运维·ubuntu·docker·云原生·容器·kubernetes·cks
2302_809798329 小时前
【JavaWeb】Docker项目部署
java·运维·后端·青少年编程·docker·容器
嵌入式大圣9 小时前
Neko虚拟浏览器远程协作方案:Docker+内网穿透技术部署实践
运维·docker·容器
dmy9 小时前
n8n内网快速部署
运维·人工智能·程序员
程序员JerrySUN10 小时前
全面理解 Linux 内核性能问题:分类、实战与调优策略
java·linux·运维·服务器·单片机