All Projects → yqchilde → JDMemberCloseAccount

yqchilde / JDMemberCloseAccount

Licence: MIT license
学习python操作selenium的一个🌰 ,也是一种京东全自动退会方案

Programming Languages

python
139335 projects - #7 most used programming language
go
31211 projects - #10 most used programming language
Dockerfile
14818 projects
Makefile
30231 projects
shell
77523 projects

Projects that are alternatives of or similar to JDMemberCloseAccount

Captcha solver
Universal python API to captcha solving services
Stars: ✭ 152 (-87.69%)
Mutual labels:  captcha
Sinesp Client
Consulta de placas de veículos na base de dados do SINESP Cidadão sem a necessidade do preenchimento de captchas
Stars: ✭ 181 (-85.34%)
Mutual labels:  captcha
Tlg joincaptchabot
Telegram Bot to verify if users that join a group, are humans. The Bot send an image captcha for each new user, and kick any of them that can't solve the captcha in a specified time.
Stars: ✭ 226 (-81.7%)
Mutual labels:  captcha
Decryptr
An extensible API for breaking captchas
Stars: ✭ 154 (-87.53%)
Mutual labels:  captcha
Antiddos System
🛡️⚔️ Protect your web app from DDOS attack or the Dead Ping + CAPTCHA VERIFICATION in one line!
Stars: ✭ 173 (-85.99%)
Mutual labels:  captcha
Cintruder
Captcha Intruder (CIntrud3r) is an automatic pentesting tool to bypass captchas.
Stars: ✭ 192 (-84.45%)
Mutual labels:  captcha
Recaptcha Module
🤖 Simple and easy Google reCAPTCHA integration with Nuxt.js
Stars: ✭ 143 (-88.42%)
Mutual labels:  captcha
12306 Captcha
基于深度学习的12306验证码识别
Stars: ✭ 254 (-79.43%)
Mutual labels:  captcha
Captcha break
验证码识别
Stars: ✭ 2,268 (+83.64%)
Mutual labels:  captcha
Rnn ctc
Recurrent Neural Network and Long Short Term Memory (LSTM) with Connectionist Temporal Classification implemented in Theano. Includes a Toy training example.
Stars: ✭ 220 (-82.19%)
Mutual labels:  captcha
Gocaptcha
A captcha library written in golang
Stars: ✭ 154 (-87.53%)
Mutual labels:  captcha
Hei.captcha
一个跨平台的图形验证码生成工具包/.net core
Stars: ✭ 172 (-86.07%)
Mutual labels:  captcha
Friendly Challenge
The widget and docs for the proof of work challenge used in Friendly Captcha. Protect your websites and online services from spam and abuse with Friendly Captcha, a privacy-first anti-bot solution.
Stars: ✭ 207 (-83.24%)
Mutual labels:  captcha
Captcha
Captcha image generator server in Go
Stars: ✭ 152 (-87.69%)
Mutual labels:  captcha
Easy12306
使用机器学习算法完成对12306验证码的自动识别
Stars: ✭ 2,674 (+116.52%)
Mutual labels:  captcha
Recaptcha
ReCaptcha helpers for ruby apps
Stars: ✭ 1,819 (+47.29%)
Mutual labels:  captcha
Decaptcha
Recognize captcha by machine learning. 机器学习识别图片验证码(专门应付本科毕业设计)
Stars: ✭ 192 (-84.45%)
Mutual labels:  captcha
rotate-captcha
Rotate image captcha,旋转图片验证码
Stars: ✭ 50 (-95.95%)
Mutual labels:  captcha
Imageocr
PHP验证码识别[PHP CAPTCHA Recognition]
Stars: ✭ 241 (-80.49%)
Mutual labels:  captcha
Captcha Recognizer
基于C#.NET异步图形验证码识别组件(集成了若快、优优云、打码兔、云打码等平台,准确率95%,速度2-6秒)采用策略设计模式
Stars: ✭ 213 (-82.75%)
Mutual labels:  captcha

JDMemberCloseAccount

介绍

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

声明

  1. 本项目仅限于学习研究selenium库的操作,以及一些python知识,不含收集用户信息

须知

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

思路

项目思路

  1. 利用selenium打开退会页面

  2. 第一关:手机验证码

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

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

      • 利用tasker软件 监听,同上

      • 使用方法:下载以上任一软件,导入相应的配置,并修改自己的IP为main.py程序监听的IP即可

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

    2. ios端:

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

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

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

          1. 填写jd_wstool 监听地址ip

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

          2. 运行脚本

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

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

        注意: OCR只是处理识别短信验证码并填入,不要误解为图形验证码也可以解决。如果定位不准,看一下项目目录生成的captcha_screenshot.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补充完整
        

        easyocr (免费,本地识别)

         * 同上,需要在config.yaml中配置如下参数:
        
         * sms_captcha.is_ocr设置为 true
        
         * sms_captcha.is_ocr.type设置为 easyocr
        
         * 使用时注意框选识别的范围只显示6位数字验证码(现支持一整条完整短信的区域,当然范围越大识别速度也会相应增加,区域扩大是为了优化某些用户短信验证码6位数字每次位置不一致问题)(毕竟免费开源,识别条件有点苛刻)
        

        百度翻译 (免费额度 10000次/每月,开通地址 百度翻译开放平台)

        开通教程:

        1. 打开 百度翻译开放平台 注册个人开发者并实名认证

        2. 打开 开发者信息 查看appid 和 秘钥

        3. 打开 服务选择 选择图片翻译服务开通

        配置信息:

         * 同上,需要在config.yaml中配置如下参数:
        
         * sms_captcha.is_ocr设置为 true
        
         * sms_captcha.is_ocr.type设置为 baidu_fanyi
        
         * sms_captcha.is_ocr.baidu_fanyi_appid补充完整
        
         * sms_captcha.is_ocr.baidu_fanyi_appkey补充完整
        
  3. 第二关:图形验证码(任选以下一种类型,更新文档时,验证方式为滑块验证码或点选式验证码,滑块已内置,仅需个人解决点选式

    1. 本地识别

      • 2022-06-06更新文档:之前的本地识别皆已失效,需重新训练
    2. 收费的打码平台

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

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

如何使用本项目

一、下载项目以及配置浏览器驱动

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

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

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

    pip3 install -r requirements.txt

    如果因没有代理拉不下包,请使用国内阿里云代理,执行如下命令:

    pip3 install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/
  3. 下载对应的浏览器驱动

    chrome请打开设置-关于chrome查看浏览器的版本,然后去 chromedriver 下载对应的版本/系统驱动,如图所示 ,将解压出来的chromedriver文件放入项目的drivers目录下即可)

二、获取 jd_wstool 监听地址及选择 jd_wstool 工具(IOS未越狱跳过此步骤)

两种方式二选一即可

  1. 外置 jd_wstool 工具: 点击下载 对应系统的 jd_wstool 工具

    • 运行下载的 jd_wstool,使用 手机 打开 jd_wstool 显示的url地址,记下能打开的url地址
  2. 内置 jd_wstool 工具: 将config.yaml文件第41行改为jd_wstool: false

    • 打开命令行工具,使用cd命令进入项目的utils文件夹下运行python listener.py,使用 手机 访问 jd_wstool 显示的url地址,记下访问时控制台有反应的url地址(手机无法访问但是控制台有反应)

三、配置项目

1. 添加cookie

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

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

2. 配置转发短信验证码

安卓
IOS越狱
  • 安装 Pythonista 3

    • 下载 监听脚本 ,修改第10行的ipaddr = '192.168.0.101'为第二步得到的IP地址
IOS未越狱
  1. 使用投屏软件将手机投射到电脑上

  2. 获取验证码区域的坐标

    • windows:按prtsc键(F12旁边)截图或其他软件截全屏,打开Windows附件* 画图,粘贴进去,切换铅笔工具,就可以在左下角查看坐标,坐标格式请查看图片 ,将坐标填入ocr_range,例ocr_range: [100, 200, 300, 400],填完坐标后不要移动投屏软件的窗口

    • mac:参考windows,请注意,windows坐标原点(0, 0)位于左上角,而mac坐标原点(0, 0)位于左下角

    • Tips:推荐使用snipaste截图软件查看屏幕坐标,屏幕左上角为原点

  3. 去百度云或阿里云申请一个OCR,或者使用本地OCR(三选一)

  4. 修改config.yaml文件

    1. 第40行改为is_ocr: true

    2. 将百度云baidu或阿里云aliyun或本地OCReasyocr(第三步选什么就填什么)填入45行type,例type: "easyocr"

    3. (本地OCR跳过此步)选择百度OCR请填写第48-50行baidu_app_id baidu_api_key baidu_secret_key,选择阿里OCR请填写第51行aliyun_appcode ,不会填就看第35-38行注释

3. 选择图形验证码识别方式(可跳过)

  • 手动:config.yaml第96行改为type: "manual"

  • 本地识别:config.yaml第96行改为type: "local"

  • 超级鹰(付费):config.yaml第96行改为type: "cjy",并填写第97-99行

  • 图鉴(付费):config.yaml第96行改为type: "tj",并填写第101-102行

👇👇👇本项目配置文件详细说明👇👇👇

config.yaml - 详细说明
# 手机端cookie,是pt_key=xxx;pt_pin=xxx;
cookie: ""
debug: false

# selenium 相关
# selenium.browserType: 浏览器类型
# selenium.headless: 无头模式,建议默认设置
# selenium.binary: 可执行路径,如果驱动没有找到浏览器的话需要你手动配置,路径 “\” 符号注意转义需要写成 "\\"
# selenium.timeout: selenium操作超时时间,超过会跳过当前店铺,进行下一个店铺,默认为30秒
# selenium.check_wait: selenium操作发送验证码和校验是否成功注销的等待时间,目的是跳过黑店,默认3秒
selenium:
  browserType: "Chrome"
  headless: false
  binary: ""
  timeout: 30
  check_wait: 3

# shop 店铺设置相关
# shop.skip_shops: 需要跳过的店铺,需要填写卡包中的完整卡包名称,多个店铺用英文逗号隔开,格式为["aag会员中心", "大自然品牌会员"]
# shop.specify_shops: 指定注销的店铺,指定店铺优先级大于需要跳过的店铺,多个店铺用英文逗号隔开,格式为["aag会员中心", "大自然品牌会员"]
# shop.phone_tail_number: 手机后4位尾号,若填写将会校验店铺尾号是否是规定的,不符合就跳过,支持多手机号,格式为["0123","1234"]
# shop.member_close_max_number: 设置本次运行注销的最大店铺数,默认为0,代表不限制
shop:
  skip_shops: [ ]
  specify_shops: [ ]
  phone_tail_number: [ ]
  member_close_max_number: 0

# sms_captcha 短信验证码相关
# sms_captcha.is_ocr: 是否开启OCR模式,IOS设备必须开启,安卓非必须
# sms_captcha.jd_wstool: 是否调用jd_wstool工具监听验证码,默认为开启,如果不想开启,设置为false会调用内置websocket监听
# sms_captcha.ws_conn_url: websocket链接地址,不用动
# sms_captcha.ws_timeout: websocket接收验证码时间超时时间,超时会跳过当前店铺,进行下一个店铺,默认为60秒
# sms_captcha.ocr.type: ocr的类型,可选:baidu、aliyun、easyocr、baidu_fanyi
# 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.baidu_fanyi_appid: 百度翻译图片翻译的`app_id`,需要在[百度翻译](https://fanyi-api.baidu.com/register) 注册账号,开通图片翻译
# sms_captcha.ocr.baidu_fanyi_appkey: 百度翻译图片翻译的`秘钥`,需要在[百度翻译](https://fanyi-api.baidu.com/register) 注册账号,开通图片翻译
# 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
  jd_wstool: true
  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: ""
    baidu_fanyi_appid: ""
    baidu_fanyi_appkey: ""
    aliyun_appcode: ""

# image_captcha 图形验证码相关
# image_captcha.type: 图形验证码类型,可选:local、cjy、tj、manual(manual为手动验证)
# 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: "tj"
  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;

四、运行程序

  • 如果你选择外置 jd_wstool 请保持开启

  • 如果你选择内置 jd_wstool 请关闭所有 jd_wstool 工具,防止堵塞

  • 保持手机短信监听软件开启,IOS未越狱请保持开启短信界面的投屏

以上条件满足后在项目目录下执行python3 main.py,等待执行完毕即可

关于 jd_wstool 工具

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

如果不想用jd_wstool,配置文件sms_captcha下面的jd_wstool设置为false,就会走内置websocket,默认为true

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

  2. 自行编译,代码在 jd_wstool 目录下

常见问题

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

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

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

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

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

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

    • 答案在这里 #48
  3. 百度OCR报错 {'error_code': 14, 'error_msg': 'IAM Certification failed'}

    • 说明从百度复制到配置文件的baidu_app_id, baidu_api_key, baidu_secret_key 不正确
  4. 百度OCR报错,根据错误码在官方API文档中查找原因

  5. 电脑端没有监听到验证码,显示等待websocket推送短信验证码超时

    • 先用手机浏览器访问监听地址,确保能访问通,如果访问不通可尝试更改电脑网络配置文件为专用或开放防火墙

    • 如果访问通说明IP没问题,请查看手机端MacroDroid或Tasker里main的日志,确保有监听到

  6. EasyOCR报错 [ERROR] 发生了一点小问题:('title cannot extend outside image')

    • 该报错说明配置文件config.yaml中的ocr_range坐标超出屏幕,导致异常,请重新填写坐标
  7. 程序如下报错说明外部的jd_wstool没有开启,请开启外部jd_wstool或使用内置的jd_wstool,或者是5201端口未被开放:

    • [WARNING] WebSocket监听时发生了问题 (22, '远程计算机拒绝网络连接。', None, 1225, None)

    • [WARNING] WebSocket监听时发生了问题 ("Multiple exceptions: [Errno 61] Connect call failed ('::1', 5201, 0, 0), [Errno 61] Connect led ('127.0.0.1', 5201)",)

测试

  1. websocket转发验证码

    1. 电脑运行python3 ./tests/test_websocket.py./jd_wstool 工具,windows记得 .exe ,此时模拟启动main程序和监听验证码程序

    2. 手机访问 http://你的IP:5201/publish?smsCode=1234522,之后查看电脑上jd_wstooltest_main.py 的控制台输出信息

  2. 百度OCR

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

    1. 运行python3 ./captcha/easy_ocr.py测试
  4. main.py执行报错

    1. config.yaml里设置debug: true再次执行可以看到具体报错,如解决不了请反馈tg群

ChangeLog

ScreenShots

TG讨论群

JD退会频道 https://t.me/JDCloseAccount

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

贡献者

感谢帮助构建完善本项目的所有开发者!

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].