
整体的抢购逻辑流程如下:
1.使用 selenium 模拟登陆拿到账号的 cookie 信息并保存
2.获取目标抢购角色的网页链接以及价格(发送生单请求时需要这两个参数)
3.完成生单之后进行支付,即发送支付请求
4.在进行支付请求时,需要拿到订单号,然而这里涉及到两个重定向,于是使用 allow_redirects=false,获取到正常的 cookie 进行下一步操作
5.在支付页面,需要发送支付请求,即输入密码后发送 post 请求,这里涉及到 md5+aes 加密,这里略过,js 是已经趴下来使用 pyexesjs 模拟,公钥是直接贴在支付页面的静态 html 里的,每次支付都会变化,所以已经没有步骤可以省略了
然后整个流程,在本机跑下来,大概是 1.8S ,其中生单 0.4S ,在浙江的服务器上,因为目标网站是搭在浙江的,ping 值理论是最小的,能够达到 1.0-1.3S 。但是这个速度根本无法抢购到目标角色,因为某宝已经能达到控制在 1S 以内,具体是多少 ms 不清楚。如下图
https://i.imgur.com/BTiutdQ.png
而我现在只能达到 1S+的速度 当然应该就是抢不到 虽然能够扣款成功 但是都会被退回
https://i.imgur.com/dms91fC.png
现在也不知道能有什么好的办法能够优化一下 加快速度了 确实也仔细看了 抓包下来 每个请求都仔细分析过 已经是没有可以省略的步骤了 但是为啥还是干不过某宝的那些人了 确实是很奇怪
1 fenghuang 2018-12-01 17:26:13 +08:00 抢购的时候快就行了,难道支付也需要很快? |
2 wc110302 OP @fenghuang 然鹅这个网站的规则是先付款的才可以抢购成功,生单成功之后只是为了拿到支付链接的 url,实际还是得看最终支付时间,我感觉和某宝差的也只是毫秒级上的,但是每次都干不过,都会在成功付款之后退回。 |
3 snal123 2018-12-01 17:37:10 +08:00 via iPhone pyexecjs 其实挺慢的 这里优化空间挺大的 /td> |
4 wc110302 OP @snal123 我这里使用的是 pyexecjs+node.js 来模拟生成加密后的密码报文的,由于加密数据是由 CryptoJS 加密的,重构成其他语言的代码不太现实 请问一下有什么好的方法推荐吗 |
5 locoz 2018-12-01 20:31:37 +08:00 via Android 直接拿 nodejs 写? |
6 zy8595208 2018-12-01 20:45:31 +08:00 via Android 抢购什么的,这么变态,还有看付款时间的 |
7 Pionxzh 2018-12-01 21:35:41 +08:00 这都抢不到? 也太变态了点 |
8 csx163 2018-12-01 21:39:33 +08:00 可能淘宝的那些都用 c 吧,或者你试试 go 一般的加密 PyCrypto 都可以解决,试试看 |
9 crab 2018-12-01 21:48:52 +08:00 1 秒内的差距就是运气。多买几台不同节点的服务器。 |
10 whoami9894 2018-12-02 10:42:26 +08:00 via Android selenium 实例化一个浏览器这么快吗 我电脑上都是 5s+ |
12 AX5N 2018-12-02 13:46:18 +08:00 这种脚本一般是在家还是在服务器上跑的,会不会是家庭宽带延迟比较大。 |
13 zr8657 2018-12-02 14:11:01 +08:00 @whoami9894 我的和你差不多速度,3-5S 吧 |
14 4BVL25L90W260T9U 2018-12-02 19:12:41 +08:00 换 pyppeteer 吧 |
17 wc110302 OP @crab @AX5N 经过 http://ping.chinaz.com/ 测试 目标网站在浙江节点下延迟最低 1-5ms 所以在进行抢购的时候买了一台杭州的 windows server 2008 顶配 按理说应该是延迟最低的情况下了 |
18 wc110302 OP |
19 wc110302 OP @fenghuang 其实也怀疑过是语言的原因 但是 C 的话自己也写不出来--! 也许用 C 写的话能够提升一部分时间吧 |
21 wc110302 OP @Pionxzh 确实是这样的 自己尝试了好几次都无法成功 以前其实也写过这种抢购软件的 但是是用来抢购那种用库存的 一般情况下都是能抢到的 但是这次这个是抢购单个角色 所以必须达到第一才能够抢到 某宝的技术团队应该是工作室之内的吧 各种大牛云集 干不过 |
23 xzbo 2019-01-31 08:49:04 +08:00 老哥,你写的这个藏宝阁爬虫卖吗 |
24 wc110302 OP @xzbo 看了下你的注册时间-- 你是看到我的帖子专门注册的账号吗? 其实脚本逻辑不难 GUI 那方面倒是花了不少功夫 |
30 molake 2019-03-05 10:17:35 +08:00 老哥,最近公司也要做个爬虫抢购,java 能开发嘛?之前没做过,求指教啊 |
32 molake 2019-03-05 17:25:20 +08:00 via Android @wc110302 主要是,抢购的话都是毫秒级别的差距,java 自身执行逻辑就比 py 慢一丢,不知道做出来可有 py 快啊,开发工期卡得紧 |
33 himaozi 2019-03-17 10:11:36 +08:00 老哥,能留个联系方式,讨论下吗~ |
34 himaozi 2019-03-17 10:38:16 +08:00 我的联系方式 vx 513893049 |
35 fangli 2019-03-27 18:52:56 +08:00 交流一下。。vx 18811447074 |
36 luzhizheng 2019-12-21 13:57:36 +08:00 这楼主是一个搞外包的,大家不要给骗了,加了 QQ 以后一直在忽悠,没两句就开始装逼,然后要我搞外包. 技术问题一个都不回答,问什么都说很简单自己搞,要不然就找我外包,真是没见过这种人,一点想探讨的精神都没有,还跟我装起逼来,说多了就开始骂我菜鸡,菜鸟,真的是给点阳光就灿烂,懂一点就开始装逼,你爸妈没有教过你做人的道理吗?真是悲哀. |
37 newyear012 2020-09-17 13:19:49 +08:00 请问下楼主还在做吗?可以交流下,我也做出来差不多的,但是也是抢不到 |