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)
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)