Giter Club home page Giter Club logo

dingdong-grabber's Introduction

叮咚抢菜助手(dingdong-grabber)

  • 支持多策略抢菜
  • 支持多种运行方式
  • 支持ios原生API请求

更新

目前项目仍在调试阶段,更新了部分代码,此项目目前仅供参考,对ios设备可用,目前暂不支持android,后续可能会更新, 也可能会静默。

  1. 支持ios原生api请求
  2. 更新签名算法
  3. 添加测试模式

05-05 风控

  • 风控越来越严格,大家尽量少运行,可以事先使用测试模式测试,如果不通,则不要运行其他策略以避免可能的风控。
  • 项目可能静默,也可能不定期更新

05-04 升级程序避免风控

正在升级程序避免405 AssertError风控

05-03 风控问题

叮咚升级了风控策略,很容易被风控,出现405 AssertError问题, 所以运行程序每天最多运行2次。 为了避免被风控,只能完全获取用户运行环境的参数动态填写,正在升级程序。

{
    "success":null,
    "error":"AssertError",
    "code":"405",
    "message":"",
    "msg":"",
    "data":"-405"
}

05-01 重大更新

本次更新兼容了叮咚小程序最新版本9.50.2,参考了Runc2333IMLR提供的签名算法,同时感谢 longIvandodobel两位童鞋的帮忙和协作。

问题issue或者需求

大家如果遇到问题或者有更合适的需求的话,可直接在Github的Issues提问或者给出建议,我会及时关注,尽量解决和满足合理的需求。

运行策略

本程序暂时只提供两种策略。

  1. 人工策略: 程序运行即开始抢菜,此策略下程序默认出于保护只会跑2分钟,如果没有商品库存,则会立即停止
  2. 定时策略: 定时抢菜,事先订好时间,叮咚默认是早上5:59:50和8:29:50开始抢菜,这种策略要避免启动过早导致用户登录信息过期。
  3. 哨兵策略: 捡漏模式,长期运行捡漏可配送时间, 不错过任何叮咚可配送时间。
  4. 测试策略: 测试抢菜配置是否正确,抢菜流程是否跑通。如果失败,就不要选择其他策略再跑了。

使用教程

dingdong-grapper需要用户提供Cookie才可运行, 所以第一步用户需要通过抓包软件抓取相关的API提取Cookie。相关的API:

获取用户信息: https://sunquan.api.ddxq.mobi/api/v1/user/detail/
获取用户买菜地址: https://sunquan.api.ddxq.mobi/api/v1/user/address/    
勾选购物车所有商品地址: https://maicai.api.ddxq.mobi/cart/allCheck
获取购物车商品地址: https://maicai.api.ddxq.mobi/cart/index
预约送达时间地址: https://maicai.api.ddxq.mobi/order/getMultiReserveTime
获取确认订单地址: https://maicai.api.ddxq.mobi/order/checkOrder
提交订单地址: https://maicai.api.ddxq.mobi/order/addNewOrder

1. 获取Cookie

新版本2.85.x改变了原来请求地址,但是获取收获地址的API并没有改变,所以无论何种客户端,可以点击微信叮咚小程序我的-收获地址, 然后在抓包软件中输入user/address获取Cookie

2. 填写Cookie

  • Cookie填入config.yaml cookie参数中

3. 运行

IDE直接运行

可以使用Goland 或者VS Code 等IDE运行。填写完用户参数后,直接运行main.go, 默认在5:59:50和08:29:50开始抢菜,长时间运行一定要注意用户登录信息过期

  • 如果没有安装Golang环境,请根据教程/安装Go环境安装
  • 定时策略: 默认即为定时策略
  • 人工策略: 运行此策略需要在config.yaml修改strategy字段值0,此策略下程序默认出于保护只会跑2分钟,如果没有商品库存,则会立即停止。
  • 哨兵策略: 运行此策略需要在config.yaml修改strategy字段值2,此策略下程序会长期运行,直到无商品库存。

Docker运行

Docker运行隔离了对Go等其他环境的依赖,可以直接运行

  • 后续将更新上传docker image

注意!注意!注意!

  1. 一定要设置买菜地址为默认地址,否则程序无法正常工作

dingdong-grabber's People

Contributors

ahutsunshine avatar ssummer520 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

dingdong-grabber's Issues

4月25日统计下单成功人数便于优化

今天有人下单成功吗?本人亲测下单成功并付款了,在此想统计下下单成功人数,如果遇到一些问题可以及时反馈,我尽量优化策略,便于第二天更容易抢到。

请教下main.go 运行的问题

Go新手小白
按README里直接在VS Code运行main.go
VS Code弹出两个dependency需要安装才行

  1. go-outline
  2. gopls
    然而开了梯子和不开梯子这两个都安装不上。。。
    求大佬相助

增加docker运行需求

发现Go环境和开发工具(Goland和Vscode)对初级开发者或者不熟悉Go的人不友好,需要添加Docker运行降低使用门槛。

寻找新的解决方案

隔壁dingdong-helper看样子是更不了了
希望作者能帮到我们!做出最后更新!

新增捡漏模式需求

叮咚的配送时间也是不断更新的,早晨6:00和8:30抢菜的时候你会很快发现有两个时间段A和B已经预约满了,但是到中午有时候会发现出现了另外一个预约时间C,这就意味着叮咚的预约时间也是不断开放的,所以这就需要一个捡漏模式不断运行捡漏,同时也需要防止过于频繁请求被风控。

503

I0420 12:02:09.357310 11196 cart.go:20] 勾选购物车全选按钮失败, 错误: 您的访问已过期,请重新登录
I0420 12:02:09.588841 11196 cart.go:20] 勾选购物车全选按钮失败, 错误: 您的访问已过期,请重新登录
I0420 12:02:09.789690 11196 cart.go:20] 勾选购物车全选按钮失败, 错误: 您的访问已过期,请重新登录
E0420 12:02:09.809905 11196 cart.go:38] 获取购物车商品失败, 错误: AssertError
E0420 12:02:09.836481 11196 cart.go:38] 获取购物车商品失败, 错误: AssertError
I0420 12:02:10.011207 11196 cart.go:20] 勾选购物车全选按钮失败, 错误: 您的访问已过期,请重新登录
E0420 12:02:10.228124 11196 cart.go:38] 获取购物车商品失败, 错误: AssertError
E0420 12:02:10.339387 11196 cart.go:38] 获取购物车商品失败, 错误: AssertError
I0420 12:02:10.339387 11196 cart.go:20] 勾选购物车全选按钮失败, 错误: 您的访问已过期,请重新登录
I0420 12:02:10.413810 11196 cart.go:20] 勾选购物车全选按钮失败, 错误: 您的访问已过期,请重新登录
E0420 12:02:10.662092 11196 cart.go:38] 获取购物车商品失败, 错误: AssertError

cookie问题

你好,我想问一下,我同一个账号的话,我用iOS获取cookie后,用Mac运行程序可以吗?
同一个用户不同设备获取的cookie会不同吗?

vscode

请问一下 vsocde咋运行啊 有具体流程吗 实在是不会弄 go环境装好了 但是不会再vscode运行 家里菜和米都没了 只剩面条了...

请教 错误: -3001

微信图片_20220425092429

您好,今早第一次用,显示错误-3001,是我新注册的账户问题么?

叮咚启用签名nars和sesi

经验证,叮咚后台已经启用了签名,如果请求不带有相应的签名,则会报下面错误. 所以需要开发带有签名的请求。

{
    "msg": "抱歉人多拥挤,请稍后再试",
    "code": -3000,
    "timestamp": "2022-04-22 22:31:02",
    "success": false,
    "exec_time": null
}

4月25日,报错依旧,跑了2分多,卡住了

{"success":false,"error":null,"code":-3100,"message":"","msg":"","data":{}}
E0425 06:00:58.886537 18420 order.go:208] 获取订单确认信息失败, 错误: -3100
I0425 06:00:58.914612 18420 order.go:133] 更新配送时间成功, 配送时间段: 自动尝试可用时段
I0425 06:00:58.918625 18420 client.go:110] 请求结果有异常, 详情: {"success":false,"error":null,"code":-3100,"message":"","msg":"","data":{}}
E0425 06:00:58.918625 18420 order.go:208] 获取订单确认信息失败, 错误: -3100
I0425 06:00:58.967255 18420 client.go:110] 请求结果有异常, 详情: {"success":false,"error":null,"code":-3000,"message":"","msg":"当前人多拥挤,请稍后尝试刷新页面","data":[]}
E0425 06:00:58.967255 18420 cart.go:45] 获取购物车商品失败, 错误: 当前人多拥挤,请稍后尝试刷新页面
I0425 06:00:59.020103 18420 cart.go:28] 勾选购物车全选按钮成功
I0425 06:00:59.078769 18420 client.go:110] 请求结果有异常, 详情: {"success":false,"error":null,"code":-3000,"message":"","msg":"当前人多拥挤,请稍后尝试刷新页面","data":[]}
I0425 06:00:59.078769 18420 config.go:215] 当前人多拥挤,请稍后尝试刷新页面
I0425 06:00:59.143964 18420 client.go:110] 请求结果有异常, 详情:

4月27日6点抢菜失败

错误信息是获取订单确认信息失败,错误:-3100。 另外,今天小程序的版本是2.85.4了跟这个有关吗?我填写的cookie能够正确获取到默认收货地址1,2,3,4等信息

付款问题

付款问题咋解决的大佬,用零钱的话,需要输入密码

更新新版本后还是提示-3000

I0423 20:54:17.003548 70729 client.go:109] 请求结果有异常, 详情: {"success":false,"error":null,"code":-3000,"message":"","msg":"抱歉人多拥挤,请稍后再试","data":[]}
E0423 20:54:17.003590 70729 order.go:116] 获取预约时间失败, 错误: 抱歉人多拥挤,请稍后再试
I0423 20:54:17.106243 70729 cart.go:78] 更新购物车数据成功, 订单金额:229.04

程序运行后一直在显示地址不执行抢菜

先感谢作者的程序..辛苦了!

想请问下作者为何我的程序执行后一直在重复显示地址不执行抢菜呢?

我操作时间是5/2 凌晨2点多, 已更新至最新代码, nodejs版本是16, main.go里已填入cookie, 然后我把第94行的 ""30 59 05 * *" 改成了 "30 59 01 * *" 进行测试, 结果如图
20220502150842

是我哪里没操作正确吗?

4月26日,测试成功

image

有一个疑问,最新的header里面很多字段消失了,是不是脚本要更新一下。 这个是不是识别特征啊?

最新更新

在@czqcs 提醒下看到一哥们实现了基于NodeJs在IOS端的抢菜,今天会实现此更新。

提个建议

推送可以使用bark,定制化更强一点

请立刻hard reset签名相关提交

请立刻hard reset签名相关提交,否则由此产生的任何后果将由你自己承担。
此举并非禁止你使用相关算法,请联系我找到合适的处理方式。

有人碰到dial tcp: lookup maicai.api.ddxq.mobi: no such host

可以拿到收货地址和站点信息,是DNS问题吗?

E0428 08:32:27.440113   58561 cart.go:62] 获取购物车商品失败, 错误: Get "https://maicai.api.ddxq.mobi/cart/index?ab_config=%7B%22key_onion%22%3A%22D%22%2C%22key_cart_discount_price%22%3A%22C%22%7D&api_version=9.50.0&app_client_id=4&app_version=2.83.0&applet_source=&channel=applet&city_number=0101&device_token=&h5_source=&is_load=1&latitude=<CENSORED>&longitude=<CENSORED>&nars=<CENSORED>&openid=&s_id=&sesi=KshgNHMa21fa2be053081a19f06b7c3f1fc376c&sharer_uid=&station_id=<CENSORED>&time=1651105681&uid=5fc1d02c13416b0001a8c062": dial tcp: lookup maicai.api.ddxq.mobi: no such host
E0428 08:32:29.673113   58561 client.go:92] Post "https://maicai.api.ddxq.mobi/order/getMultiReserveTime": dial tcp: lookup maicai.api.ddxq.mobi: no such host
E0428 08:32:29.673134   58561 order.go:129] 获取预约时间失败, 错误: Post "https://maicai.api.ddxq.mobi/order/getMultiReserveTime": dial tcp: lookup maicai.api.ddxq.mobi: no such host

疑问:我填写cookie后,运行main.go后一直提示设置默认地址,默认站点和经纬度

提示这个是因为对运行时间段有要求吗?(当前时间:17:20)
I0424 17:15:57.084147 19510 address.go:40] 1.默认收货地址:xxxxxxxxxxxxxxxxx, 手机号: xxxxxxxxxxxx
I0424 17:15:57.084166 19510 address.go:41] 2.该地址对应站点名称为:浦三站
I0424 17:15:57.084170 19510 address.go:42] 3.设置买菜地址经度:121.520791
I0424 17:15:57.084176 19510 address.go:43] 4.设置买菜地址纬度:31.140239

新增捡漏模式

简单实现了捡漏模式,此模式下可长期运行(实现非并发,串行执行),大家可以尝试一下。pull下最新代码,只需要在main.go将strategy字段值设为2即可。

更新到最新版后报错

Build Error: go build -o c:\Users\AD\Downloads\dingdong-grabber-main\pkg\notice__debug_bin.exe -gcflags all=-N -l .
github.com/dingdong-grabber/pkg/notice
.\music.go:13:6: Mp3 redeclared in this block
.\mp3.go:14:6: other declaration of Mp3 (exit status 2)

关于程序运行逻辑,想请教一下

代码里用到了多线程,而且一直在刷新,那有没有可能最终addNewOrder的数据存在错误?
例如,在最后提交的时候购物车商品有变化,但checkOrder数据还没有更新到

抢菜提示抱歉人多拥挤

同一时间段app端手动购买提示是 运力已满。

I0426 08:47:16.070168 17116 cart.go:45] 勾选购物车全选按钮成功
I0426 08:47:16.584096 17116 client.go:127] 请求结果有异常, 详情: {"success":false,"error":null,"code":-3000,"message":"","msg":"当前人多拥挤,请稍后尝试刷新页面","data":[]}
E0426 08:47:16.584127 17116 cart.go:62] 获取购物车商品失败, 错误: 当前人多拥挤,请稍后尝试刷新页面
I0426 08:47:16.648329 17116 cart.go:45] 勾选购物车全选按钮成功
I0426 08:47:16.793593 17116 client.go:127] 请求结果有异常, 详情: {"success":false,"error":null,"code":-3000,"message":"","msg":"抱歉人多拥挤,请稍后再试","data":[]}
E0426 08:47:16.793621 17116 order.go:128] 获取预约时间失败, 错误: 抱歉人多拥挤,请稍后再试

请求结果有异常,抱歉人多拥挤,请稍后再试

4.22上午,测试时无法获取预约时间,猜测是checkorder request出问题,程序反复报错:
cart.go:74 更新购物车数据成功, 订单金额:49.90
client.go:90 请求结果有异常, 详情: {"success":false,"error":null,"code":-3000,"message":"","msg":"抱歉人多拥挤,请稍后再试","data":[]}
order.go:107 获取预约时间失败, 错误: 抱歉人多拥挤,请稍后再试

与此同时手机上测试没有拥挤问题,只是无可选的配送时间

405 风控问题

抢菜助手不可长时间运行,否则易被风控,出现405 AssertError问题。

解决方案: 经测试,可以更换新的cookie避免405 AssertError问题。
如何更换不同的 cookie:

  • 退出叮咚手机app,重新登录和抓取
  • 退出微信叮咚小程序,重新登录和抓取

请注意,一定要和上次的cookie不一样才有意义。

{
    "success":null,
    "error":"AssertError",
    "code":"405",
    "message":"",
    "msg":"",
    "data":"-405"
}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.