优化天龙畅易阁抢号程序

优化天龙畅易阁抢号程序

优化什么呢?

上一篇博文对应的程序是基于谷歌插件实现的,过分依赖chrome,而且由于需要开启本地服务,又增加了时间消耗。为了节省识别时间,加快post频率,我又在想新的方法。

绕过登录的大坑

前两天仔细研究了一下畅易阁的登录代码,太难了,很多cookie还是本地脚本生成的,实在超出我能力范围,所以换了一个笨方法,用浏览器登录,把cookie复制出来直接使用。


首先登录天龙畅易阁的账号,随便点进去一个商品页或者首页,右键检察元素,点击网络,再刷新一次网页,找到网页文稿对应的名称,在它的请求中找到Cookie,将冒号后面的内容复制下来

然后用下面的代码:

1
2
3
4
5
6
7
8
9
10
id = 201909261745566152 # 要抢的商品id
cookie_str = "" # 输入你刚才复制的cookie字符串
header = {
'cookie': cookie_str,
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36'
}
goodUrl = "http://tl.cyg.changyou.com/goods/char_detail?serial_num=" + str(id)
goodReq = urllib.request.Request(goodUrl, None, header)
raw = request.urlopen(goodReq)
html = raw.read().decode('utf-8')

得到的html变量已经是登录后的样子了

同样的,验证码也可以直接获取到

1
2
3
4
5
6
7
8
9
10
# 这里换了一种方式
req = request.Request(url)
#设置cookie
req.add_header('cookie', cookie_str)
#设置请求头
req.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36')
resp = request.urlopen(req)
# 获取验证码图片数据
byteImg = io.BytesIO(resp.read())
im = Image.open(byteImg)

整体代码架构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 获取精确的抢号开始时间
def getRestTime():
return time

# 开始抢号
def start():
getCaptchaImage() # 获取验证码
postBuy() # 发送下单请求
if success:
return True
else:
return False

startTime = getRestTime()
while startTime > time.time():
time.sleep(0.05)
print("start post---")
# 开始循环抢号
for i in range(20):
print(i, '-----')
flag = start()
if flag == True:
break

效果简述

原来的谷歌插件程序,抢号每轮识别和请求的总时间在200毫秒以上,现在能在150毫秒左右。

最须提升的部分:判断进入交易区的时间点,精准打击,很多次都输在了这个时间点的把控上,最后给我返回服务器错误,就是说已经有人比我先post下单请求,服务器正在处理,就像卵子那样(哈哈~)

Thank you for every coin~