def get_checkout_page_detail():
    """获取订单结算页面信息

    该方法会返回订单结算页面的详细信息:商品名称、价格、数量、库存状态等。

    :return: 结算信息 dict
    """
    url = 'http://trade.jd.com/shopping/order/getOrderInfo.action'
    # url = 'https://cart.jd.com/gotoOrder.action'
    payload = {
        'rid': str(int(time.time() * 1000)),
    }
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/531.36",
        "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3",
        "Referer": "https://cart.jd.com/cart.action",
        "Connection": "keep-alive",
        'Host': 'trade.jd.com',
    }
    try:
        resp = session.get(url=url, params=payload, headers=headers)
        if not response_status(resp):
            logger.error('获取订单结算页信息失败')
            return ''
        if '刷新太频繁了' in resp.text:
            return '刷新太频繁了'
        soup = BeautifulSoup(resp.text, "html.parser")
        risk_control = get_tag_value(soup.select('input#riskControl'), 'value')
        showCheckCode = get_tag_value(soup.select('input#showCheckCode'), 'value')
        if not showCheckCode:
            pass
        else:
            if showCheckCode == 'true':
                message.sendAny('提交订单需要验证码')
                time.sleep(5)
                os.system('setsid python jdBuyMask_for_VPS.py &')
                sys.exit(1)
                global is_Submit_captcha, encryptClientInfo
                encryptClientInfo = get_tag_value(soup.select('input#encryptClientInfo'), 'value')
                is_Submit_captcha = True

        order_detail = {
            'address': soup.find('span', id='sendAddr').text[5:],  # remove '寄送至: ' from the begin
            'receiver': soup.find('span', id='sendMobile').text[4:],  # remove '收件人:' from the begin
            'total_price': soup.find('span', id='sumPayPriceId').text[1:],  # remove '¥' from the begin
            'items': []
        }

        logger.info("下单信息:%s", order_detail)
        return risk_control
    except requests.exceptions.RequestException as e:
        logger.error('订单结算页面获取异常:%s' % e)
    except Exception as e:
        logger.error('下单页面数据解析异常:%s', e)
    return ''
def fastMode():
    flag = 1
    
    while (1):
        try:
            if flag == 1:
                message.sendAny("【京东口罩监控服务已开启】")  
                validate_cookies()
                getUsername()
                select_all_cart_item()
                remove_item()
            # 检测配置文件修改
            if int(time.time()) - configTime >= 600:
                nowMd5 = getconfigMd5()
                if not nowMd5 == configMd5:
                    #logger.info('配置文件修改,重新读取文件')
                    getconfig()
            # modelType
            if flag <= 50:
                print('第' + str(flag) + '次')
            flag += 1
            # 检测库存
            inStockSkuid = check_new(session, skuids, area)
            # 下单任务
            fastModeAutoBuy(inStockSkuid)
            # 休眠模块
            timesleep = random.randint(8, 12) / 10
            time.sleep(timesleep)
            # 校验是否还在登录模块
            if flag % 100 == 0:
                #logger.info('第' + str(flag) + '次')
                logger.info('校验是否还在登录,第' + str(flag) + '次')
                validate_cookies()
                if flag % 1000 == 0:
                    message.sendAny('V2 ALIVE')
            if order_count >= 10:
                os.system('setsid python jdBuyMask_for_VPS.py &')
                sys.exit(1)

        except Exception as e:
            print(traceback.format_exc())
            time.sleep(10)
Example #3
0
def validate_cookies():
    for flag in range(1, 3):
        try:
            targetURL = 'https://order.jd.com/center/list.action'
            payload = {
                'rid': str(int(time.time() * 1000)),
            }
            resp = session.get(url=targetURL, params=payload, allow_redirects=False)
            if resp.status_code == requests.codes.OK:
                logger.info('登录成功')
                return True
            else:
                logger.info('第【%s】次请重新获取cookie', flag)
                time.sleep(5)
                continue
        except Exception as e:
            logger.info('第【%s】次请重新获取cookie', flag)
            time.sleep(5)
            continue
    message.sendAny('脚本登录cookie失效了,请重新登录')
    sys.exit(1)