Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

学习python操作selenium的一个🌰 ,也是一种京东自动退会方案,用来全自动退出京东加入的所有店铺会员

License

Notifications You must be signed in to change notification settings

CJavaScript/JDMemberCloseAccount

Repository files navigation

JDMemberCloseAccount

介绍

本项目是我学习python操作selenium的一个🌰,也是一种京东自动退会方案,用来全自动退出京东加入的所有店铺会员

声明

  1. 本项目仅限于学习研究selenium库的操作,以及一些python知识

须知

  1. 有一定的电脑知识 or 有耐心爱折腾
  2. chrome驱动(只在chrome测试了,故只留了chrome)
  3. 操作系统(只在mac上测试了,非M1)
  4. 使用python3.x版本执行
  5. 有一定python基础知识,没有的话先去学一下,起码得会搭python环境

思路

项目思路

  1. 利用selenium打开退会页面

  2. 第一关:手机验证码

    1. 安卓端(以下两种任选一个用就行):

      • 利用macrodroid软件 监听,一旦监听到就立即通过HTTP请求利用websocket推送过来并送到selenium中填写

      • 利用tasker软件 监听,同上

      • 关于 taskermacrodroid 配置均在 extra 目录下

    2. ios端:

      1. 越狱机(来自@curtinlv 大佬的越狱监听短信方法,#61 )

        • 像安卓端一样传验证码(基本逻辑:iOS设备通过访问短信数据库,监听最新的jd验证码)

          下载 getiOSMessages.py 传到手机上(测试Pythonista 3可以,其他软件自行研究)

          1. 填写执行主程序 main.py 中监听的地址ip

            如:监听地址1: http://192.168.0.101:5201,填在脚本开头 ipaddr= '192.168.0.101'

          2. 运行脚本

      2. 非越狱机 (任选以下一种类型)

        首先感谢tg群的朋友@millerchen 提供的思路,具体实现方案是电脑屏幕留出一个区域用来显示手机投屏的地方,然后打开短信列表,然后找个截图工具记一下当前需要识别的的左上角右下角坐标(最好截取那一整条短信的坐标,当然截取范围越小,识别越快),然后通过ocr工具识别数字验证码

        注意: OCR只是处理识别短信验证码并填入,不要误解为图形验证码也可以解决。如果定位不准,看一下项目目录生成的ios_code_pic.png 图片位置在当前屏幕的哪个位置,测试识别效果gif点我查看 , 此外,坐标和电脑分辨率有关,如果分辨是是1080P,那么qq截图识别的坐标就是刚好一比一的,比我的是4k显示器,是以百分之200显示的,那所有坐标就要乘以2了

        百度ocr ( 之前用过的用户还是免费500次/天的额度,新用户调整为1000次/月的额度,调整详情参考这里)

         * 需要在`config.yaml`中配置如下参数:
         * `sms_captcha.is_ocr`设置为`true`
         * `sms_captcha.is_ocr.type`设置为`baidu`
         * `sms_captcha.is_ocr.baidu_app_id`补充完整
         * `sms_captcha.is_ocr.baidu_api_key`补充完整
         * `sms_captcha.is_ocr.baidu_secret_key`补充完整
        

        阿里云ocr ( 用户新购0元500次,后续500次/0.01元,开通地址阿里云市场)

         * 同上,需要在`config.yaml`中配置如下参数:
         * `sms_captcha.is_ocr`设置为`true`
         * `sms_captcha.is_ocr.type`设置为`aliyun`
         * `sms_captcha.is_ocr.aliyun_appcode`补充完整
        

        cnocr (免费,本地识别,体积更小,速度更快)

         * 同上,需要在`config.yaml`中配置如下参数:
         * `sms_captcha.is_ocr`设置为`true`
         * `sms_captcha.is_ocr.type`设置为`cnocr`
        

        easyocr 已弃用 (免费,本地识别)

         * 已弃用,请切换到cnocr
        
  3. 第二关:图形验证码(任选以下一种类型,默认采用本地识别)

    1. 本地识别(再也不用花钱了👍),来自@AntonVanke 大佬提供的 JDCaptcha 项目(已集成) ,测试图在最后一张 ,

    2. 收费的打码平台

      • 图形验证码用 超级鹰打码 ,费用是1块=1000积分,一次扣15积分

      • 图形验证码用 图鉴打码 ,费用是1块=1积分,一次扣0.01积分

操作

1. 下载项目以及配置浏览器驱动

注意: 以下关于python3, pip3 命令只代表python3.x环境,故如果电脑python环境已是3.x,可直接用pythonpip代替

  1. 克隆到本地或下载项目压缩包到本地

    git clone https://github.com/yqchilde/JDMemberCloseAccount.git
  2. 在项目根目录下打开终端执行以下命令,安装所需要的包

    pip3 install -r requirements.txt
  3. 下载对应的浏览器驱动放到项目的drivers文件夹下面

    • chrome请访问chrome://version/查看浏览器的版本,然后去 chromedriver 下载对应的版本/系统驱动(只需要保证版本号前三段一致即可,比如91.0.4472.77只需要保证91.0.4472.x就行),下载后解压,将其可执行文件(mac为chromedriver ,win为chromedriver.exe放在项目的drivers目录下即可)

2. 补充配置文件

  • config.yaml文件
# 手机端cookie,是pt_key=xxx;pt_pin=xxx;
cookie: ""
debug: false
# selenium 相关
# selenium.browserType: 浏览器类型
# selenium.headless: 无头模式,建议默认设置
# selenium.binary: 可执行路径,如果驱动没有找到浏览器的话需要你手动配置
# selenium.selenium_timeout: selenium操作超时时间,超过会跳过当前店铺,进行下一个店铺,默认为30秒
selenium:
 browserType: "Chrome"
 headless: false
 binary: ""
 selenium_timeout: 30
# shop 店铺设置相关
# shop.skip_shops: 需要跳过的店铺,需要填写卡包中的完整店铺名称,为了效率没做模糊匹配,多个店铺用逗号隔开
# shop.phone_tail_number: 手机后4位尾号,若填写将会校验店铺尾号是否是规定的,不符合就跳过
# shop.member_close_max_number: 设置本次运行注销的最大店铺数,默认为0,代表不限制
shop:
 skip_shops: ""
 phone_tail_number: ""
 member_close_max_number: 0
# sms_captcha 短信验证码相关
# sms_captcha.is_ocr: 是否开启OCR模式,IOS设备必须开启,安卓非必须
# sms_captcha.ws_conn_url: websocket链接地址,不用动
# sms_captcha.ws_timeout: websocket接收验证码时间超时时间,超时会跳过当前店铺,进行下一个店铺,默认为60秒
# sms_captcha.ocr.type: ocr的类型,可选:baidu、aliyun、cnocr
# sms_captcha.ocr.ocr_range: 需要截取的投屏区域的验证码左上角和右下角坐标,顺序依次是 [左x,左y,右x,右y],如[1,2,3,4]
# sms_captcha.ocr.ocr_delay_time: OCR识别的延迟时间,如果没识别到就几秒后再次尝试,默认为5
# sms_captcha.ocr.baidu_app_id: 需要在[百度智能云](https://cloud.baidu.com/) 注册个账号,搜索文字识别项目,创建应用后的`app_id`
# sms_captcha.ocr.baidu_api_key: 需要在[百度智能云](https://cloud.baidu.com/) 注册个账号,搜索文字识别项目,创建应用后的`api_key`
# sms_captcha.ocr.baidu_secret_key: 需要在[百度智能云](https://cloud.baidu.com/) 注册个账号,搜索文字识别项目,创建应用后的`secret_key`
# sms_captcha.ocr.aliyun_appcode: 需要在[阿里云市场](https://market.aliyun.com/products/57124001/cmapi028554.html?spm=5176.2020520132.101.2.608172181RzlnC#sku=yuncode2255400000) 购买后的`AppCode`
sms_captcha:
 is_ocr: false
 ws_conn_url: "ws://localhost:5201/subscribe"
 ws_timeout: 60
 ocr:
 type: ""
 ocr_range: [ ]
 ocr_delay_time: 10
 baidu_app_id: ""
 baidu_api_key: ""
 baidu_secret_key: ""
 aliyun_appcode: ""
# image_captcha 图形验证码相关
# image_captcha.type: 图形验证码类型,可选:local、cjy、tj
# image_captcha.cjy_username: 超级鹰账号,仅在 image_captcha.type 为 cjy 时需要设置
# image_captcha.cjy_password: 超级鹰密码,仅在 image_captcha.type 为 cjy 时需要设置
# image_captcha.cjy_soft_id: 超级鹰软件ID,仅在 image_captcha.type 为 cjy 时需要设置
# image_captcha.cjy_kind: 超级鹰验证码类型,仅在 image_captcha.type 为 cjy 时需要设置,且该项目指定为 9101
# image_captcha.tj_username: 图鉴账号,仅在 image_captcha.type 为 tj 时需要设置
# image_captcha.tj_password: 图鉴密码,仅在 image_captcha.type 为 tj 时需要设置
# image_captcha.tj_type_id: 图鉴验证码类型,仅在 image_captcha.type 为 tj 时需要设置,且该项目指定为 19
image_captcha:
 type: "local"
 cjy_username: ""
 cjy_password: ""
 cjy_soft_id: ""
 cjy_kind: 9101
 tj_username: ""
 tj_password: ""
 tj_type_id: 19
# user-agent 用户代理,可自行配置
user-agent:
 - Mozilla/5.0 (Linux; Android 11; M2007J3SC) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.210 Mobile Safari/537.36
 - okhttp/3.12.1;jdmall;android;version/10.0.2;build/88569;screen/1080x2266;os/11;network/wifi;

3. 添加cookie (二选一)

  • 使用add_cookie.py可以获取手机端Cookie 并自动配置到 config.yaml 文件中

  • 手动在 config.yaml 中写入 cookie 项,注意是pt_key=123456;pt_pin=jd_987654的那个(请不要随意泄露你的cookie)

4. 根据手机终端类型补充配置 (其实还是第2步,这里详细再讲下)

大体说一下,这块是关于手机端短信验证码的配置

  1. 安卓推荐使用tasker或macrodroid,不要用ocr,不必须,是为了你省事,IOS越狱设备也可以使用短信转发功能,IOS非越狱必须使用OCR

  2. 如果是使用tasker / macrodroid,is_ocr肯定是false,代表不用ocr

  3. 如果用ocr,is_ocr写true,能理解吧

  4. ocr里面的type是三选一,baidu / aliyun / cnocr,代表你要用的ocr平台是哪个,cnocr是本地的,其他两个是线上的

  5. ocr_range是你要截图的区域,不知道怎么截,往下翻,有截图

  6. ocr_delay_time是ocr延迟时间,不想改就保持默认

  7. 下面的配置,就是type你用baidu,下面id,key啥的你就写baidu的,阿里同样原理,cnocr不用写

5. 启动主程序

在项目目录下执行python3 main.py,等待执行完毕即可

关于 jd_wstool 工具(已弃用)

该工具是用来监听手机端发送HTTP请求传递验证码的,实现原理是websocket

  1. 我编译好了各种操作系统的包,直接下载 jd_wstool, 选择自己的电脑系统对应的压缩包,解压运行
  2. 自行编译,代码在 cmd 目录下

常见问题

  1. Tasker | Macrodroid 监听不到短信怎么办?

    • vivo手机和iqoo手机的验证码保护取消: 短信-设置-隐私保护-验证码安全保护关闭

    • 小米手机:权限-允许读取短信 & 允许读取通知类短信

    • 华为手机:短信-右上角三个点-设置-验证码安全保护关闭

    • 权限没问题的,看下tasker的日志或macrodroid的日志,有错误会显示

  2. 百度OCR报错 {'error_code': 18, 'error_msg': 'Open api qps request limit reached'}

  3. 百度OCR报错 {'error_code': 14, 'error_msg': 'IAM Certification failed'}

    • 说明从百度复制到配置文件的baidu_app_id, baidu_api_key, baidu_secret_key 不正确

测试

  1. websocket转发验证码

    1. 电脑运行python3 test_main.py ,此时模拟启动main程序和监听验证码程序
    2. 手机访问 http://你的IP:5201/publish?smsCode=1234522,之后查看电脑上test_main.py 的控制台输出信息
  2. 百度OCR

    1. 运行python3 ./captcha/baidu_ocr.py测试
  3. Easy OCR

    1. 运行python3 ./captcha/easy_ocr.py测试

ScreenShots

TG讨论群

JD退会讨论群 https://t.me/jdMemberCloseAccount

Thanks

感谢以下作者开源JD相关项目供我学习使用

@AntonVanke

About

学习python操作selenium的一个🌰 ,也是一种京东自动退会方案,用来全自动退出京东加入的所有店铺会员

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Python 86.0%
  • Go 11.6%
  • Makefile 2.4%

AltStyle によって変換されたページ (->オリジナル) /