Python实现某东上自动抢茅台代码脚本

前言

20万人抢购几瓶茅台,本人已经坚持了3个月仍未抢到,甚至一度怀疑有猫腻根本没有提供可抢购的商品,只是JD的假数据,但是直到最近通过python脚本完成了抢购才发现是真的,手动抢购真的是拼运气!可惜每人只能抢购一瓶,下面给出具体实现步骤,祝愿各位都能顺利抢购成功。

环境

python3.7
requests2.23
ios14
windows10

编码

1、获取jd时间

       # url = 'https://a.jd.com//ajax/queryServerData.html'
       # ret = requests.get(url).text
       # print("京东时间:" )
       # print(ret)
       # js = json.loads(ret)
       # print("js:" +js)
       # return int(js["serverTime"])
       # 以上代码在新版app里已经失效
       # 使用下面方案
        url = 'https://api.m.jd.com'
        resp = requests.get(url, verify=False)
        jd_timestamp = int(resp.headers.get('X-API-Request-Id')[-13:])
        return jd_timestamp

2、说明,此例不展示脚本自动预约,这个我用手动预约的方案替代,非必须的代码没开发。

3、获取cookie
通过fidder配置好代理,苹果手机浏览器中下载证书,ios中证书下载完成会显示在设置顶部,点击安装完成后并在关于中选择对应的证书并信任,这步必须。这里不详细讲解如何抓包,具体流程可参考本博客中的文章。

获取的cookie可以通过配置文件配置,当然你也可以放在session管理里。

4、 获取二维码下载二维码登录

 def _get_qrcode_ticket(self):
        """
        通过 token 获取票据
        :return:
        """
        url = 'https://qr.m.jd.com/check'
        payload = {
            'appid': '133',
            'callback': 'jQuery{}'.format(random.randint(1000000, 9999999)),
            'token': self.session.cookies.get('wlfstk_smdl'),
            '_': str(int(time.time() * 1000)),
        }
        headers = {
            'User-Agent': self.spider_session.get_user_agent(),
            'Referer': 'https://passport.jd.com/new/login.aspx',
        }
        resp = self.session.get(url=url, headers=headers, params=payload)

        if not response_status(resp):
            logger.error('获取二维码扫描结果异常')
            return False

        resp_json = parse_json(resp.text)
        if resp_json['code'] != 200:
            logger.info('Code: %s, Message: %s', resp_json['code'], resp_json['msg'])
            return None
        else:
            logger.info('已完成手机客户端确认')
            return resp_json['ticket']

    def _validate_qrcode_ticket(self, ticket):
        """
        通过已获取的票据进行校验
        :param ticket: 已获取的票据
        :return:
        """
        url = 'https://passport.jd.com/uc/qrCodeTicketValidation'
        headers = {
            'User-Agent': self.spider_session.get_user_agent(),
            'Referer': 'https://passport.jd.com/uc/login?ltype=logout',
        }

        resp = self.session.get(url=url, headers=headers, params={'t': ticket})
        if not response_status(resp):
            return False

        resp_json = json.loads(resp.text)
        if resp_json['returnCode'] == 0:
            return True
        else:
            logger.info(resp_json)
            return False

5、抢购

    def request_seckill_url(self):
        logger.info('用户:{}'.format(self.get_username()))
        logger.info('商品名称:{}'.format(self.get_sku_title()))
        self.timers.start()
        logger.info('|||获取商品的抢购连接...')
        self.seckill_url[self.sku_id] = self.get_seckill_url()
        logger.info('|||访问商品的抢购连接...')
        headers = {
            'User-Agent': self.user_agent,
            'Host': 'marathon.jd.com',
            'Referer': 'https://item.jd.com/{}.html'.format(self.sku_id),
        }
        self.session.get(
            url=self.seckill_url.get(
                self.sku_id),
            headers=headers,
            allow_redirects=False)
 def request_seckill_checkout_page(self):
       # 页面结算
        logger.info('访问抢购订单结算页面...')
        url = 'https://marathon.jd.com/seckill/seckill.action'
        payload = {
            'skuId': self.sku_id,
            'num': self.seckill_num,
            'rid': int(time.time())
        }
        headers = {
            'User-Agent': self.user_agent,
            'Host': 'marathon.jd.com',
            'Referer': 'https://item.jd.com/{}.html'.format(self.sku_id),
        }
        resp = self.session.get(url=url, params=payload, headers=headers, allow_redirects=False)
        logger.info('------------------订单结算页面返回-------------')
       url = 'https://marathon.jd.com/seckillnew/orderService/pc/submitOrder.action'
        payload = {
            'skuId': self.sku_id,
        }
        try:
            self.seckill_order_data[self.sku_id] = self._get_seckill_order_data()
        except Exception as e:
            logger.info('抢购失败,无法获取生成订单的基本信息,接口返回:【{}】'.format(str(e)))
            return False

        logger.info('提交抢购订单...')
  
  #说明,提交秒杀的url可以通过fidder抓包获取,由于链接变动频繁,直到写这篇文章时已经发生了变化
 

6、pip所需要的依赖
certifi2020.4.5.1
chardet
3.0.4
idna2.9
lxml~=4.5.1
requests~=2.23.0
urllib3
1.25.9

  • 9
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 写一个自动抢购京东茅台的脚本需要以下步骤: 1. 打开京东茅台商品页面,确定你想要抢购的商品的 URL。 2. 使用 Python 的网络爬虫模块,例如 requests 库,来爬取商品页面的 HTML 代码。 3. 解析 HTML 代码,找到抢购按钮的位置。 4. 使用 Python自动化测试模块,例如 selenium,来模拟点击抢购按钮。 5. 设置一个循环,不断检查商品是否已经抢购成功。如果成功,退出循环;如果未成功,继续循环。 下面是一个简单的示例代码: ```python import time from selenium import webdriver # 打开浏览器 driver = webdriver.Chrome() # 访问商品页面 driver.get("商品页面 URL") while True: # 点击抢购按钮 driver.find_element_by_css_selector("抢购按钮的 CSS 选择器").click() # 检查是否抢购成功 result = driver.find_element_by_css_selector("抢购结果的 CSS 选择器").text if result == "抢购成功": print("抢购成功!") break else: print("抢购未成功,继续尝试...") # 等待一段时间再继续尝试 time.sleep(1) # 关闭浏览器 driver. ### 回答2: 使用Python写一个自动抢购京东茅台的脚本有以下步骤: 1. 导入相关的模块,如selenium和webdriver,用于实现自动化操作。 2. 设置浏览器驱动,如ChromeDriver,确保能在代码中对浏览器进行控制。 3. 打开京东网站,并登录账号。 4. 进入茅台商品页面,获取抢购按钮的位置和状态。 5. 判断抢购按钮的状态,如果是可点击状态,则点击抢购按钮。 6. 进入结算页面,选择收货地址、支付方式等相关信息。 7. 确认订单并完成支付。 上述步骤中,一般比较关键的是第4步和第5步。在第4步中,需要通过网页元素定位的方式找到抢购按钮,并获取其状态信息,常用的定位方式有XPath和CSS选择器。在第5步中,需要判断抢购按钮的状态,如果是可点击状态,则调用点击操作,实现抢购功能。 在编写脚本时,可以结合selenium的API文档和浏览器开发者工具来查找和定位页面元素,以及了解元素的属性和状态。此外,还可以使用隐式等待或显式等待来确保页面加载完毕后再进行操作,避免因页面未加载完而导致的错误。 需要注意的是,使用自动脚本抢购商品可能会违反京东的使用规定,甚至涉及到法律问题。因此,在实际操作中应遵循相关法律法规和京东的规定,建议合法合规地使用自动脚本,并确保不会对他人造成不公平竞争或恶意利用的影响。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值