1 Star 0 Fork 11

清风徐来/京东秒杀脚本

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
miaosha.py 8.58 KB
一键复制 编辑 原始数据 按行查看 历史
gavinYoung 提交于 2018-01-25 22:12 . python 网站部署阶段
from urllib import request
from bs4 import BeautifulSoup
import json
import requests
import re
import time
import traceback
# cookie 是指用户在网页登录上京东后获得的cookie值
global cookie
# goodsPageId 是指京东商城页面中每个商品页面的url地址
# 例如https://item.jd.com/4215115.html
global goodsPageUrl
# goodsPageUrl中的id号, 这个id号在获取价格是有用
global goodsUrlId
# cookie中的值, 需要用户
global trackID
# headers发送请求时必须填写的请求头
global headers
# 预期的价格
global except_price
# 初始化方法
def init(self_cookie, self_goodsUrlId, self_except_price):
global cookie
global goodsPageUrl
global trackID
global goodsUrlId
global except_price
except_price = self_except_price
cookie = self_cookie
goodsUrlId = self_goodsUrlId
goodsPageUrl = 'https://item.jd.com/'+str(self_goodsUrlId)+'.html'
for c in re.compile(r';\s*').split(self_cookie):
ls = re.compile(r'\s*=\s*').split(c)
if ls[0] == 'TrackID':
trackID = ls[1]
print('trackID的值为:'+trackID)
init_header()
return
print('trackID 值取不到, 请填入正确的cookie')
exit(0)
# 初始化请求头的信息
def init_header():
global headers
global cookie
user_agent = 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:56.0) Gecko/20100101 Firefox/56.0'
accept = 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'
accept_language = 'en-US,en;q=0.5'
accept_ecoding = 'gzip, deflate'
connect = 'keep-alive'
headers = {'User-Agent': user_agent, 'Accept': accept, 'Accept-Language': accept_language,
'Accept-Encoding': accept_language, 'Cookie': cookie, 'Connection': connect}
# 提交订单方法
def submitOrder(result):
global trackID
html = result.read().decode('utf-8')
soup = BeautifulSoup(html, 'lxml')
riskControl = soup.find(id='riskControl')['value']
#这是订单显示的页面, 想要提交订单, url地址是 'https://trade.jd.com/shopping/order/submitOrder.action'
#关键是要从这个页面中提取出订单的信息 必填的param有:
#submitOrderParam.sopNotPutInvoice, submitOrderParam.TrackID, submitOrderParam.btSupport, riskControl
url = 'https://trade.jd.com/shopping/order/submitOrder.action'
# trackID 是在cookie中获取的
# '1tpdF8meXyz3q6lwHczWCmquOsUzEqNkVxi4ZNTwpzi93w0df-iIPnlKQHXeMn_L3oXKG2yjOpye-tJAeoc7yiDVHgF0oD026uhJIhebUCDNGMpm7TBd6gwvjTQ20AMpQHtM8nRe5jelg6Xf9kzgWfg',
data = {
'submitOrderParam.sopNotPutInvoic': False,
'submitOrderParam.TrackID': trackID,
'submitOrderParam.btSupport': 0,
'riskControl': riskControl
}
r = requests.post(url, data=json.dumps(data), headers=headers)
print(r)
print('提交订单成功')
# 获取商品的当前价格
def getPrice():
global goodsUrlId
url = 'https://item.m.jd.com/product/'+str(goodsUrlId)+'.html'
req = request.Request(url, headers=headers)
with request.urlopen(req) as result:
html = result.read().decode('utf-8')
soup = BeautifulSoup(html, 'lxml')
price = soup.find(class_='plus-jd-price-text').string
return price.strip()
# 不停地获取货品页面信息, 检查货品的价格, 如果货品的价格低于预期则跳出循环, 并且 cart_req: 请求加入购物车的request
def check_price():
global goodsPageUrl
global headers
global except_price
req = request.Request(goodsPageUrl, headers=headers)
while True:
with request.urlopen(req) as result:
print('进入货品信息页面')
html = result.read().decode('gbk')
soup = BeautifulSoup(html, 'lxml')
# 注意, 京东的价格信息并不是直接放在前端的,需要通过api从后端获取, 这个api需要传递的参数应该是货品的id就够了
# 获取价格的api没有找到, 但是可以通过https://item.m.jd.com/product/4913108.html(可能是手机端页面)这个来获取价格
# 因为手机平台没有js解释器, 所以京东必须将渲染好的html页面直接发送过来
price = getPrice()
print(price)
if float(price) <= float(except_price):
print('价格低于预期值,开始抢购')
break
print('价格高于预期值, 继续查询')
time.sleep(0.5)
a = soup.find(id='InitCartUrl')
cart_url = 'https:' + a['href']
cart_req = request.Request(cart_url, headers=headers)
return cart_req
# 主要的前期处理过程: 获取商品页面, 将商品加入购物车, 进入订单页面
def body():
global headers
while True:
try:
cart_req = check_price()
break
except Exception as e:
print('获取商品信息出现异常, 重新获取')
continue
with request.urlopen(cart_req) as result:
print('加入购物车')
cart_html = result.read().decode('utf-8')
cart_soup = BeautifulSoup(cart_html, 'lxml')
ca = cart_soup.find(id='GotoShoppingCart')
ca_url = 'https:'+ca['href']
ca_req = request.Request(ca_url, headers=headers)
with request.urlopen(ca_req) as result:
print('进入购物车页面')
html = result.read().decode('utf-8')
soup = BeautifulSoup(html, 'lxml')
rid = soup.find(id='currentTime')
url = 'https://trade.jd.com/shopping/order/getOrderInfo.action?rid='+str(rid['value'])
req = request.Request(url, headers=headers)
with request.urlopen(req) as result:
print('进入提交订单页面')
submitOrder(result)
def miao_sha_body(cookie, goodsId, except_price):
# todo end
init(cookie, goodsId, except_price)
while True:
try:
body()
break
except Exception as e:
print('抢购异常, 重新抢购')
traceback.print_exc()
continue
print('抢购成功, 退出')
if __name__ == '__main__':
# todo 填写cookie和goodsId信息
cookie = '__jdu=15165050905851832767848; flow_outsite_ad=2_bzclk.baidu.com__0_0_1830098_1831565_20180122110641; showDQNav=1; unpl=V2_ZzNtbRBfERF1XRJSfk5UB2IGElURBEYccAtEVnIfX1FnAxdcclRCFXwUR1RnGlgUZwUZWURcQBdFCHZXfBpaAmEBFl5yBBNNIEwEACtaDlwJBBpUQ1NLEXUITl1LKV8FVwMTbUJTQxJxCUJVcxhYDGMDG19BUUQTfA1PZEsebDVXABJbRVdKJXQ4R2Q5TQANZgMWX0EaQxF1D0JVfxhUBGMKFl1LVUATcg5PUXIpXTVk; CCC_SE=ADC_XcJJJmIK9vwIrjC5%2fSO%2fUYuGPFO7xyVfaYRxWYSVxjgdv18M%2fss%2f49DS1JGPvpkzJB6U6XjzVxLzzqHBWZC94uIwvsd9K4gM2gdwJogmWk6LE1BfJiK7V8SbJE07bbuHkQjgPG1krgWhbZewN0pYsYpQZzYu%2bs26aY%2bh%2boGBth7b8PmYn8KT0aFjLdmfzHyi%2fXzKa9CfXYeumetXBmWVHi37cgCjxcB4GkpyAPzgIE1JXuAgQ3ajtQlVqhqp7gsSTewe8ac2vRncuWshj8412Wj%2bhHOQLwf9%2feSdb1i6MJYVLd9n%2fFJSmGelAgv1AU5u41D60M3vap9COeKaQ6OlL9OAhVEvNyRFZMuuIc5kjv0IbvQ3uiD9C3KFqC%2b7LEd92BB8QUyul93F85ZKASSoeJFMnUBVRzxesbOyS3YYnaofVRPYUa1xZFBBsHWGOjZq0uoLj1JfIa6cxFEPWBr3bAz69WmRnwvppx4k3VNqMHqqxO0LF%2bH7rqJMm59eMudqqwPSxl3w8zHlX7gUXEbRyKOEgmtutt4hsGOmW4FCMwYukG83LC1BFP6Xk7yUJ%2faC; __jda=122270672.15165050905851832767848.1516505091.1516859320.1516874244.11; __jdc=122270672; PCSYCityID=1114; user-key=8ff06e40-4f97-426d-b483-09050b680068; cn=0; wlfstk_smdl=wc3nl1mqzf5zceqvhcr7qz944bdvn73k; _jrda=11; _jrdb=1516874252193; TrackID=1H8eB9h-sZ8zYn7LsYXs85u7r0mgVuyhwKtlFduhTRedQqJ8pKA-vwvEBLJGeonEKVureUBaun5HLt5KhHV4HTvcFgU-gMc6Etr3UTpMczeHnQKt9SepaFIEM7ECX_ofd; pinId=dPyp80TgMH4kHm4jHbWhHrV9-x-f3wj7; pin=jd_52ac086714044; unick=jd_153055nkv; thor=1BBC4DD21A194F8A40B9CD0BF1CA9989F712A4F5705A457A3D14EF8FAF2B4D5C05BFCD6B455FB21AFEF274E072D56AA548290C14792474DE8C0E2EF4481319E0E023FECC3B59B9422D6C48564181E939238FCA0469D7B402FB441E83139CE40D663FC6E5000030132691A0A32F8C8D5D80B8751AD65524BCAEE320E8B68AC2835E684D5F203119F5A143D334B5FCB34C6B744F436FA822A0A2A5D1B71F1604E3; _tp=9AAw9qklHibYYDcSGzILH9FE0Nz0HA4QFDuqnbVp8u0%3D; _pst=jd_52ac086714044; ceshi3.com=000; __jdv=122270672|baidu-search|t_262767352_baidusearch|cpc|69805951198_0_c9c51de74f934419bb484233872e1140|1516874275908; 3AB9D23F7A4B3C9B=KP7D5T32LWNCFYDOIPZNWB7IT4BBZA334OZFZNWCXRWTZ2L5IPNKXBCHXGHDTXCN55FYXKGTAPRELKNMUDD4D3LCQU; __jdb=122270672.6.15165050905851832767848|11.1516874244'
goodsId = '4066511'
except_price = 40
# todo end
init(cookie, goodsId, except_price)
while True:
try:
body()
break
except Exception as e:
print('抢购异常, 重新抢购')
traceback.print_exc()
continue
print('抢购成功, 退出')
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Python
1
https://gitee.com/chen_guo_hong/JingDongMiaoShaJiaoBen.git
git@gitee.com:chen_guo_hong/JingDongMiaoShaJiaoBen.git
chen_guo_hong
JingDongMiaoShaJiaoBen
京东秒杀脚本
master

搜索帮助