Coder Social home page Coder Social logo

runc2333 / dingdong-helper-node Goto Github PK

View Code? Open in Web Editor NEW
197.0 197.0 49.0 435 KB

叮咚买菜助手,使用iOS客户端原生API,支持高峰期下单、支持捡漏、支持多账号、支持webhook通知(需自行实现对端)

License: GNU General Public License v3.0

JavaScript 100.00%
dingdong dingdong-helper javascript nodejs

dingdong-helper-node's People

Contributors

runc2333 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

dingdong-helper-node's Issues

新功能讨论 | 考虑通过worker_threads之类的增加并发能力,倒计时执行功能

今天实测下单成功
大约12秒成功下单,目前单次感觉性能上不如JAVA版本的,猜测是否因为JAVA并发请求?
通过worker_threads这类的是不是能够做到像JAVA版本那样并发请求提高性能呢?
当然也有可能只是纯纯的运气不好或者叮咚假库存🌚

另外可否加入传入启动参数以定时运行呢,虽然有别的办法可以做到,不过感觉传入启动参数以在特定时间运行会比较省心一点

下单失败

[2022-05-01 06:00:13] [INFO] [] 尝试下单 8 件商品 总计: 266.60 元 送达时间: 自动尝试可用时段
[2022-05-01 06:00:13] [ERROR] [] 下单失败: 前方拥挤,请稍后再试...
[2022-05-01 06:00:13] [INFO] [] 尝试下单 8 件商品 总计: 266.60 元 送达时间: 自动尝试可用时段
[2022-05-01 06:00:13] [ERROR] [] 下单失败: 商品总价错误

到底是没有抢到时间失败?还是因为总价错误所以下单失败?

0830成功

但似乎没有自动使用账号里面的优惠券,账号里几张优惠券都没有被使用

这个是什么错误啊?

[Jackie-HJdeMacBook-Pro:dingdong-helper-node-main Jackie$ yarn checkout:normal
yarn run v1.22.18
$ node scripts/checkout_cart
/Users/Jackie/Downloads/dingdong-helper-node-main/service/session_parser.js:79
"ddmc-device-token": header.find(item => item.name.toLowerCase() == "ddmc-device-token").value,
^

TypeError: Cannot read properties of undefined (reading 'value')
at load_profile (/Users/Jackie/Downloads/dingdong-helper-node-main/service/session_parser.js:79:97)
at /Users/Jackie/Downloads/dingdong-helper-node-main/scripts/checkout_cart.js:96:27
at /Users/Jackie/Downloads/dingdong-helper-node-main/scripts/checkout_cart.js:162:11

Node.js v18.0.0
error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.

charles获取的Session没有ddmc-device-token导致运行报错

Windows Powershell下运行时提示

PS D:\dingdong-helper-node-main> yarn checkout:normal
yarn run v1.22.18
$ node scripts/checkout_cart
D:\dingdong-helper-node-main\service\session_parser.js:79
"ddmc-device-token": header.find(item => item.name.toLowerCase() == "ddmc-device-token").value,
^

TypeError: Cannot read properties of undefined (reading 'value')
at load_profile (D:\dingdong-helper-node-main\service\session_parser.js:79:97)
at D:\dingdong-helper-node-main\scripts\checkout_cart.js:96:27
at D:\dingdong-helper-node-main\scripts\checkout_cart.js:162:11

Node.js v17.0.1
error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
PS D:\dingdong-helper-node-main>

看了下charles抓的https://maicai.api.ddxq.mobi/cart/index这个包下也确实没找到ddmc-device-token这个值
在Untitled.chlsj里手动添加token的空值后运行是这样提示了

PS D:\dingdong-helper-node-main> yarn checkout:normal
yarn run v1.22.18
$ node scripts/checkout_cart
[2022-05-01 10:11:25] [DEBUG] 尝试获取不存在的 Param: device_token
[2022-05-01 10:11:26] [INFO] [] 当前默认地址 : *********************
[2022-05-01 10:11:26] [DEBUG] 尝试获取不存在的 Param: device_token
[2022-05-01 10:11:26] [DEBUG] 尝试获取不存在的 Param: device_token
[2022-05-01 10:11:27] [ERROR] 获取购物车内容失败: 购物车无有货商品

这样是正常可运行吗

[已解决]抓了iOS的包,想试试能不能逆向iOS签名算法

代码加了跳过代理,不太好抓包,不过已经抓到了,此处先略过
node版本还没配置,在JAVA版试了一下,简单配置一下,不带验证可以获取到地址消息,可以全选购物车。
无法获取配送时间和下单,会返回人多拥挤。重放请求,大概十次请求后失效返回人多拥挤,不带签名或修改请求内容均会返回人多拥挤。
应该可以确认目前关键请求均带有验证,如果不还原签名算法应该是不能模拟APP请求进行下单。
看到逆向安卓APP想到了逆向iOS包,脱壳后看了一下代码,签名算法包括了sha和md5,但是能力不足还没啥进展,今天再试试吧
如果这边作者可以逆向APP成功,起码在接口这部分就不会被限制了,毕竟APP很难像小程序那样快速迭代

下单成功!感谢

今早8:30:20左右测试成功一单,非常感谢 @Runc2333@IMLR的努力。

祝大伙五一快乐(包括叮咚程序员XD),疫情期间天天有饭吃!

下单失败

大佬你好:
选了外地城市做了测试,一直提示下单失败: 您选择的送达时间已经失效了,请重新选择。
[2022-05-01 14:14:00] [INFO] [] 当前默认地址 : 西湖区教工路6-8号
[2022-05-01 14:14:01] [INFO] 购物车商品更新: 共 5 件
[2022-05-01 14:14:01] [INFO] 预约时间更新: 尽快送达(大约14:58)
[2022-05-01 14:14:01] [INFO] 订单信息更新: 总计: 41.62 元
[2022-05-01 14:14:01] [INFO] [] 尝试下单 5 件商品 总计: 41.62 元 送达时间: 尽快送达(大约14:58)
[2022-05-01 14:14:02] [ERROR] [] 下单失败: 您选择的送达时间已经失效了,请重新选择

被封号了

为了测试搭建的运行环境是否正确,使用哨兵模式2-3分钟。发现被封号了,提示“同一时间下单人数过多...”
早上手动抢单还成功的。现在手动无法下单了,使用同住朋友的手机,随便测试了一票。可以下单。
所以,应该是被封号了。
难道使用哨兵模式,才2-3分钟,就被封了?

共享运力计划

现在运力接口风控厉害
有没有一起弄一弄 运力共享的

高峰有效方案

微信抓不到包了,今天早上8:30微信手动点,点进去了,耗时二十几秒,说明微信还有戏,就是抓不到包了不知道有没有大佬能解决
根本的解决就是逆向APP,不知道大佬们进展怎么样
405在大家讨论后彻底解决了,再也没报过
图片
👆这是Java版的,node版也没问题
然后渠道也是有效的,我今天6点程序耗时十几秒抢到了,要改参数,不建议用非常冷门的渠道

下单失败,似乎“有虚假缓存”

购物车加了220多的东西,提前15秒启动,一直是如下信息,持续大概1分多钟:

[2022-05-02 06:01:32] [ERROR] [] 下单失败: 前方拥挤,请稍后再试...
[2022-05-02 06:01:32] [INFO] [] 尝试下单 12 件商品 总计: 225.39 元 送达时间: 自动尝试可用时段
[2022-05-02 06:01:35] [ERROR] [] 下单失败: 前方拥挤,请稍后再试...
[2022-05-02 06:01:35] [INFO] [] 尝试下单 12 件商品 总计: 225.39 元 送达时间: 自动尝试可用时段
[2022-05-02 06:01:35] [ERROR] [] 下单失败: 前方拥挤,请稍后再试...
[2022-05-02 06:01:35] [INFO] [] 尝试下单 12 件商品 总计: 225.39 元 送达时间: 自动尝试可用时段
[2022-05-02 06:01:35] [ERROR] [] 下单失败: 前方拥挤,请稍后再试...
[2022-05-02 06:01:35] [INFO] [] 尝试下单 12 件商品 总计: 225.39 元 送达时间: 自动尝试可用时段
[2022-05-02 06:01:35] [ERROR] [] 下单失败: 前方拥挤,请稍后再试...
[2022-05-02 06:01:35] [INFO] [] 尝试下单 12 件商品 总计: 225.39 元 送达时间: 自动尝试可用时段

感觉不对,因为过了1分钟,货物金额根据经验应该会少很多,于是kill了程序,重新yarn启动,之后立马显示:

[2022-05-02 06:01:38] [INFO] 当前提交订单并发数: 3
[2022-05-02 06:01:38] [INFO] 当前线程创建延迟: 100 ms
[2022-05-02 06:01:39] [INFO] [] 当前默认地址 : <隐藏>
[2022-05-02 06:01:42] [ERROR] 获取购物车内容失败: 当前人多拥挤,请稍后尝试刷新页面
[2022-05-02 06:01:46] [ERROR] 获取购物车内容失败: 当前人多拥挤,请稍后尝试刷新页面
[2022-05-02 06:01:46] [ERROR] 获取购物车内容失败: 当前人多拥挤,请稍后尝试刷新页面
[2022-05-02 06:01:46] [ERROR] 获取购物车内容失败: 当前人多拥挤,请稍后尝试刷新页面
[2022-05-02 06:01:47] [INFO] 购物车商品更新: 共 3 件
[2022-05-02 06:01:47] [INFO] 预约时间更新: 自动尝试可用时段
[2022-05-02 06:01:47] [ERROR] 获取订单失败: 当前页面拥挤,部分数据加载失败
[2022-05-02 06:01:47] [ERROR] 获取订单失败: 当前页面拥挤,部分数据加载失败
[2022-05-02 06:01:47] [ERROR] 获取订单失败: 当前页面拥挤,部分数据加载失败
[2022-05-02 06:01:47] [ERROR] 获取订单失败: 当前页面拥挤,部分数据加载失败
[2022-05-02 06:01:47] [ERROR] 获取订单失败: 当前页面拥挤,部分数据加载失败
[2022-05-02 06:01:47] [ERROR] 获取订单失败: 当前页面拥挤,部分数据加载失败
[2022-05-02 06:01:47] [ERROR] 获取订单失败: 当前页面拥挤,部分数据加载失败
[2022-05-02 06:01:47] [ERROR] 获取订单失败: 当前页面拥挤,部分数据加载失败
[2022-05-02 06:01:47] [ERROR] 获取订单失败: 当前页面拥挤,部分数据加载失败
[2022-05-02 06:01:47] [ERROR] 获取订单失败: 当前页面拥挤,部分数据加载失败
[2022-05-02 06:01:48] [ERROR] 获取订单失败: 当前页面拥挤,部分数据加载失败
[2022-05-02 06:01:48] [ERROR] 获取订单失败: 当前页面拥挤,部分数据加载失败
[2022-05-02 06:01:48] [ERROR] 获取订单失败: 当前页面拥挤,部分数据加载失败
[2022-05-02 06:01:48] [ERROR] 获取订单失败: 当前页面拥挤,部分数据加载失败
[2022-05-02 06:01:48] [INFO] 订单信息更新: 总计: 21.60 元
[2022-05-02 06:01:48] [INFO] [] 尝试下单 3 件商品 总计: 21.60 元 送达时间: 自动尝试可用时段
[2022-05-02 06:01:48] [ERROR] [] 下单失败: 前方拥挤,请稍后再试...
[2022-05-02 06:01:48] [INFO] [] 尝试下单 3 件商品 总计: 21.60 元 送达时间: 自动尝试可用时段
.......
[2022-05-02 06:01:52] [INFO] [] 尝试下单 3 件商品 总计: 21.60 元 送达时间: 自动尝试可用时段
[2022-05-02 06:01:52] [ERROR] [] 下单失败: 前方拥挤,请稍后再试...
[2022-05-02 06:01:52] [INFO] [] 尝试下单 3 件商品 总计: 21.60 元 送达时间: 自动尝试可用时段
[2022-05-02 06:01:52] [INFO] [] 下单成功

重启后更新购物车就抢到了,猜测多线程下单时候,更新购物车也需要多线程吧,貌似java程序也有这个逻辑?

风控策略讨论,也许存在蜜罐?

比较明确的情况是如果闲时获取配送时间还是提示拥挤是肯定账号被风控了

但今早似乎发现了一种新的模式:
该帐号首先在6点成功一单
之后叮咚补货,购买时获取配送时间时有时无(当时确实可能获取到拥挤结果),之后能获取到“自动尝试可用时间”,但事实上首页已经显示了运力已约满,此时其他账号下单直接获取到配送时间,此帐号尝试下单不成功

过一段时间后彻底无法获取配送时间,此时应该已经明确被风控了

考虑是否存在一种蜜罐?
即在账号异常时返回自动尝试可用时间,但事实上无运力,以测试该账号是否仍在提交订单,之后确定是否风控?

只是一种猜测,也许只是当时的缓存结果没有更新,事实上已经被风控了

捡漏模式分策略执行,以及监控模式

很多人反应捡漏模式运行几个小时后被封号,应该是存在针对账号查询频率风控,所以能不能把捡漏的策略修改一下?

Delivery:运力优先模式,也就是现在的normal模式,用于运力紧缺的地区,封号风险较高,有货且有运力直接疯狂下单,每次都带登录查询,目测不可连续运行超过两个小时以上(暂时)

Goods :货品优先模式,用于运力基本充足,但随机上货的地区。提前读取购物车后不带登录查询货品库存状态,封号风险较低,有货且有运力单线程下单,只有下单时才带登录,避免封号

讨论:
1.这个模式应该要设置最低下单金额?
2.这个模式要不要通知“有货但是金额不足没进行下单动作”?
因为可能最低金额设置太高错过多次可下单机会,但通知有可能反复提醒
3.是否要在下单前不带登录从首页预读取当前站点是否运力已满,以防止默认有运力导致反复带登录尝试下单?

另:是否开发纯监控模式?
Notification:单纯监控当前有货商品,因为可能不知道当前站点可能会上什么东西,自己加购物车里的东西一直没货,或者上了同类新商品不知道,没有加购物车

这个我之前写过监控,基本上就是每次读取所有可买商品,和上一次的比较,有新商品则通知。可用于纯手动捡漏
已知坑:
1.有的商品可能反复上架,会重复通知,要有黑名单模式
2.有的商品可能上架了,但由于搜索缓存,搜索结果还是无货,但加购物车有货,可以购买
3.如果看到监控再打开APP找到商品加购物车下单,可能等到结算已经无货了,也可能只能拿来做通知

另外此功能可能对叮咚服务器造成较大压力

最后就是高峰(早6点8点半)使用的
Speed:速抢模式

提个可选优化建议

通知其实可以用 bark 这个 app 来实现,现成的api,实现起来也比较方便,发起一个 request 就好了

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.