整体的抢购逻辑流程如下:
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 其实挺慢的 这里优化空间挺大的
|
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
ospider 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
请问下楼主还在做吗?可以交流下,我也做出来差不多的,但是也是抢不到
|