diff --git a/README.md b/README.md index c598392b7d95e0b7561ca393fcbd38f76dc87203..70aacca21a9861beecd6e776e2dd2e2d6df1b0b4 100644 --- a/README.md +++ b/README.md @@ -32,7 +32,8 @@ V2 - [x] 邮件、微信通知 ## 更新记录 -- 【2020.02.06】新增微信通知(http://sc.ftqq.com/3.version 查看sc_key),bug修复。 +- 【2020.02.07】无货等情况下单失败不重试。 +- 【2020.02.07】新增微信通知(http://sc.ftqq.com/3.version 查看sc_key),bug修复。 - 【2020.02.06】V2版本,刷新更快更频繁,通过配置文件添加商品和地区id。 - 【2020.02.06】提交失败之后会继续不会暂停。 - 【2020.02.06】购物车有套装商品导致解析skuid错误。 diff --git a/jdBuyMask.py b/jdBuyMask.py index f9ae6f9729e61cd4bb76beb92858ab6949a4d51d..1d200a1a44ab1fffa398f3432e1a040a8d224331 100644 --- a/jdBuyMask.py +++ b/jdBuyMask.py @@ -10,6 +10,7 @@ import random from bs4 import BeautifulSoup from log.jdlogger import logger from message.message import message +import traceback ''' 闇瑕佷慨鏀 @@ -27,7 +28,7 @@ mail = 'xxxxxx@qq.com' sc_key = '' # 鍟嗗搧鐨剈rl -url = [ +urls = [ # 'https://c0.3.cn/stock?skuId=1336984&area=19_1607_4773_0&venderId=1000078145&buyNum=1&choseSuitSkuIds=&cat=9192,12190,1517&extraParam={%22originid%22:%221%22}&fqsp=0&pdpin=jd_7c3992aa27d1a&pduid=1580535906442142991701&ch=1&callback=jQuery6715489', # 'https://c0.3.cn/stock?skuId=4642656&area=19_1607_4773_0&venderId=1000006724&buyNum=1&choseSuitSkuIds=&cat=9192,12190,1517&extraParam={%22originid%22:%221%22}&fqsp=0&pdpin=jd_7c3992aa27d1a&pduid=1580535906442142991701&ch=1&callback=jQuery4552086', # 'https://c0.3.cn/stock?skuId=65466451629&area=19_1607_4773_0&venderId=127922&buyNum=1&choseSuitSkuIds=&cat=9855,9858,9924&extraParam={%22originid%22:%221%22}&fqsp=0&pdpin=jd_7c3992aa27d1a&pduid=1580535906442142991701&ch=1&callback=jQuery2790674', @@ -300,7 +301,9 @@ def get_checkout_page_detail(): return risk_control -def submit_order(risk_control): +def submit_order(risk_control,sku_id): + + """鎻愪氦璁㈠崟 閲嶈锛 @@ -352,39 +355,48 @@ def submit_order(risk_control): "Connection": "keep-alive", 'Host': 'trade.jd.com', } - - try: - resp = session.post(url=url, data=data, headers=headers) - resp_json = json.loads(resp.text) - - # 杩斿洖淇℃伅绀轰緥锛 - # 涓嬪崟澶辫触 - # {'overSea': False, 'orderXml': None, 'cartXml': None, 'noStockSkuIds': '', 'reqInfo': None, 'hasJxj': False, 'addedServiceList': None, 'sign': None, 'pin': 'xxx', 'needCheckCode': False, 'success': False, 'resultCode': 60123, 'orderId': 0, 'submitSkuNum': 0, 'deductMoneyFlag': 0, 'goJumpOrderCenter': False, 'payInfo': None, 'scaleSkuInfoListVO': None, 'purchaseSkuInfoListVO': None, 'noSupportHomeServiceSkuList': None, 'msgMobile': None, 'addressVO': None, 'msgUuid': None, 'message': '璇疯緭鍏ユ敮浠樺瘑鐮侊紒'} - # {'overSea': False, 'cartXml': None, 'noStockSkuIds': '', 'reqInfo': None, 'hasJxj': False, 'addedServiceList': None, 'orderXml': None, 'sign': None, 'pin': 'xxx', 'needCheckCode': False, 'success': False, 'resultCode': 60017, 'orderId': 0, 'submitSkuNum': 0, 'deductMoneyFlag': 0, 'goJumpOrderCenter': False, 'payInfo': None, 'scaleSkuInfoListVO': None, 'purchaseSkuInfoListVO': None, 'noSupportHomeServiceSkuList': None, 'msgMobile': None, 'addressVO': None, 'msgUuid': None, 'message': '鎮ㄥ娆℃彁浜よ繃蹇紝璇风◢鍚庡啀璇'} - # {'overSea': False, 'orderXml': None, 'cartXml': None, 'noStockSkuIds': '', 'reqInfo': None, 'hasJxj': False, 'addedServiceList': None, 'sign': None, 'pin': 'xxx', 'needCheckCode': False, 'success': False, 'resultCode': 60077, 'orderId': 0, 'submitSkuNum': 0, 'deductMoneyFlag': 0, 'goJumpOrderCenter': False, 'payInfo': None, 'scaleSkuInfoListVO': None, 'purchaseSkuInfoListVO': None, 'noSupportHomeServiceSkuList': None, 'msgMobile': None, 'addressVO': None, 'msgUuid': None, 'message': '鑾峰彇鐢ㄦ埛璁㈠崟淇℃伅澶辫触'} - # {"cartXml":null,"noStockSkuIds":"xxx","reqInfo":null,"hasJxj":false,"addedServiceList":null,"overSea":false,"orderXml":null,"sign":null,"pin":"xxx","needCheckCode":false,"success":false,"resultCode":600157,"orderId":0,"submitSkuNum":0,"deductMoneyFlag":0,"goJumpOrderCenter":false,"payInfo":null,"scaleSkuInfoListVO":null,"purchaseSkuInfoListVO":null,"noSupportHomeServiceSkuList":null,"msgMobile":null,"addressVO":{"pin":"xxx","areaName":"","provinceId":xx,"cityId":xx,"countyId":xx,"townId":xx,"paymentId":0,"selected":false,"addressDetail":"xx","mobile":"xx","idCard":"","phone":null,"email":null,"selfPickMobile":null,"selfPickPhone":null,"provinceName":null,"cityName":null,"countyName":null,"townName":null,"giftSenderConsigneeName":null,"giftSenderConsigneeMobile":null,"gcLat":0.0,"gcLng":0.0,"coord_type":0,"longitude":0.0,"latitude":0.0,"selfPickOptimize":0,"consigneeId":0,"selectedAddressType":0,"siteType":0,"helpMessage":null,"tipInfo":null,"cabinetAvailable":true,"limitKeyword":0,"specialRemark":null,"siteProvinceId":0,"siteCityId":0,"siteCountyId":0,"siteTownId":0,"skuSupported":false,"addressSupported":0,"isCod":0,"consigneeName":null,"pickVOname":null,"shipmentType":0,"retTag":0,"tagSource":0,"userDefinedTag":null,"newProvinceId":0,"newCityId":0,"newCountyId":0,"newTownId":0,"newProvinceName":null,"newCityName":null,"newCountyName":null,"newTownName":null,"checkLevel":0,"optimizePickID":0,"pickType":0,"dataSign":0,"overseas":0,"areaCode":null,"nameCode":null,"appSelfPickAddress":0,"associatePickId":0,"associateAddressId":0,"appId":null,"encryptText":null,"certNum":null,"used":false,"oldAddress":false,"mapping":false,"addressType":0,"fullAddress":"xxxx","postCode":null,"addressDefault":false,"addressName":null,"selfPickAddressShuntFlag":0,"pickId":0,"pickName":null,"pickVOselected":false,"mapUrl":null,"branchId":0,"canSelected":false,"address":null,"name":"xxx","message":null,"id":0},"msgUuid":null,"message":"xxxxxx鍟嗗搧鏃犺揣"} - # {'orderXml': None, 'overSea': False, 'noStockSkuIds': 'xxx', 'reqInfo': None, 'hasJxj': False, 'addedServiceList': None, 'cartXml': None, 'sign': None, 'pin': 'xxx', 'needCheckCode': False, 'success': False, 'resultCode': 600158, 'orderId': 0, 'submitSkuNum': 0, 'deductMoneyFlag': 0, 'goJumpOrderCenter': False, 'payInfo': None, 'scaleSkuInfoListVO': None, 'purchaseSkuInfoListVO': None, 'noSupportHomeServiceSkuList': None, 'msgMobile': None, 'addressVO': {'oldAddress': False, 'mapping': False, 'pin': 'xxx', 'areaName': '', 'provinceId': xx, 'cityId': xx, 'countyId': xx, 'townId': xx, 'paymentId': 0, 'selected': False, 'addressDetail': 'xxxx', 'mobile': 'xxxx', 'idCard': '', 'phone': None, 'email': None, 'selfPickMobile': None, 'selfPickPhone': None, 'provinceName': None, 'cityName': None, 'countyName': None, 'townName': None, 'giftSenderConsigneeName': None, 'giftSenderConsigneeMobile': None, 'gcLat': 0.0, 'gcLng': 0.0, 'coord_type': 0, 'longitude': 0.0, 'latitude': 0.0, 'selfPickOptimize': 0, 'consigneeId': 0, 'selectedAddressType': 0, 'newCityName': None, 'newCountyName': None, 'newTownName': None, 'checkLevel': 0, 'optimizePickID': 0, 'pickType': 0, 'dataSign': 0, 'overseas': 0, 'areaCode': None, 'nameCode': None, 'appSelfPickAddress': 0, 'associatePickId': 0, 'associateAddressId': 0, 'appId': None, 'encryptText': None, 'certNum': None, 'addressType': 0, 'fullAddress': 'xxxx', 'postCode': None, 'addressDefault': False, 'addressName': None, 'selfPickAddressShuntFlag': 0, 'pickId': 0, 'pickName': None, 'pickVOselected': False, 'mapUrl': None, 'branchId': 0, 'canSelected': False, 'siteType': 0, 'helpMessage': None, 'tipInfo': None, 'cabinetAvailable': True, 'limitKeyword': 0, 'specialRemark': None, 'siteProvinceId': 0, 'siteCityId': 0, 'siteCountyId': 0, 'siteTownId': 0, 'skuSupported': False, 'addressSupported': 0, 'isCod': 0, 'consigneeName': None, 'pickVOname': None, 'shipmentType': 0, 'retTag': 0, 'tagSource': 0, 'userDefinedTag': None, 'newProvinceId': 0, 'newCityId': 0, 'newCountyId': 0, 'newTownId': 0, 'newProvinceName': None, 'used': False, 'address': None, 'name': 'xx', 'message': None, 'id': 0}, 'msgUuid': None, 'message': 'xxxxxx鍟嗗搧鏃犺揣'} - # 涓嬪崟鎴愬姛 - # {'overSea': False, 'orderXml': None, 'cartXml': None, 'noStockSkuIds': '', 'reqInfo': None, 'hasJxj': False, 'addedServiceList': None, 'sign': None, 'pin': 'xxx', 'needCheckCode': False, 'success': True, 'resultCode': 0, 'orderId': 8740xxxxx, 'submitSkuNum': 1, 'deductMoneyFlag': 0, 'goJumpOrderCenter': False, 'payInfo': None, 'scaleSkuInfoListVO': None, 'purchaseSkuInfoListVO': None, 'noSupportHomeServiceSkuList': None, 'msgMobile': None, 'addressVO': None, 'msgUuid': None, 'message': None} - - if resp_json.get('success'): - logger.info('璁㈠崟鎻愪氦鎴愬姛! 璁㈠崟鍙凤細%s', resp_json.get('orderId')) - return True - else: - message, result_code = resp_json.get('message'), resp_json.get('resultCode') - if result_code == 0: - # self._save_invoice() - message = message + '(涓嬪崟鍟嗗搧鍙兘涓虹涓夋柟鍟嗗搧锛屽皢鍒囨崲涓烘櫘閫氬彂绁ㄨ繘琛屽皾璇)' - elif result_code == 60077: - message = message + '(鍙兘鏄喘鐗╄溅涓虹┖ 鎴 鏈嬀閫夎喘鐗╄溅涓晢鍝)' - elif result_code == 60123: - message = message + '(闇瑕佸湪payment_pwd鍙傛暟閰嶇疆鏀粯瀵嗙爜)' - logger.info('璁㈠崟鎻愪氦澶辫触, 閿欒鐮侊細%s, 杩斿洖淇℃伅锛%s', result_code, message) - logger.info(resp_json) - return False - except Exception as e: - logger.error(e) - return False + for count in range(1, 2): + logger.info('绗琜%s/%s]娆″皾璇曟彁浜よ鍗', count, 3) + try: + resp = session.post(url=url, data=data, headers=headers) + resp_json = json.loads(resp.text) + + # 杩斿洖淇℃伅绀轰緥锛 + # 涓嬪崟澶辫触 + # {'overSea': False, 'orderXml': None, 'cartXml': None, 'noStockSkuIds': '', 'reqInfo': None, 'hasJxj': False, 'addedServiceList': None, 'sign': None, 'pin': 'xxx', 'needCheckCode': False, 'success': False, 'resultCode': 60123, 'orderId': 0, 'submitSkuNum': 0, 'deductMoneyFlag': 0, 'goJumpOrderCenter': False, 'payInfo': None, 'scaleSkuInfoListVO': None, 'purchaseSkuInfoListVO': None, 'noSupportHomeServiceSkuList': None, 'msgMobile': None, 'addressVO': None, 'msgUuid': None, 'message': '璇疯緭鍏ユ敮浠樺瘑鐮侊紒'} + # {'overSea': False, 'cartXml': None, 'noStockSkuIds': '', 'reqInfo': None, 'hasJxj': False, 'addedServiceList': None, 'orderXml': None, 'sign': None, 'pin': 'xxx', 'needCheckCode': False, 'success': False, 'resultCode': 60017, 'orderId': 0, 'submitSkuNum': 0, 'deductMoneyFlag': 0, 'goJumpOrderCenter': False, 'payInfo': None, 'scaleSkuInfoListVO': None, 'purchaseSkuInfoListVO': None, 'noSupportHomeServiceSkuList': None, 'msgMobile': None, 'addressVO': None, 'msgUuid': None, 'message': '鎮ㄥ娆℃彁浜よ繃蹇紝璇风◢鍚庡啀璇'} + # {'overSea': False, 'orderXml': None, 'cartXml': None, 'noStockSkuIds': '', 'reqInfo': None, 'hasJxj': False, 'addedServiceList': None, 'sign': None, 'pin': 'xxx', 'needCheckCode': False, 'success': False, 'resultCode': 60077, 'orderId': 0, 'submitSkuNum': 0, 'deductMoneyFlag': 0, 'goJumpOrderCenter': False, 'payInfo': None, 'scaleSkuInfoListVO': None, 'purchaseSkuInfoListVO': None, 'noSupportHomeServiceSkuList': None, 'msgMobile': None, 'addressVO': None, 'msgUuid': None, 'message': '鑾峰彇鐢ㄦ埛璁㈠崟淇℃伅澶辫触'} + # {"cartXml":null,"noStockSkuIds":"xxx","reqInfo":null,"hasJxj":false,"addedServiceList":null,"overSea":false,"orderXml":null,"sign":null,"pin":"xxx","needCheckCode":false,"success":false,"resultCode":600157,"orderId":0,"submitSkuNum":0,"deductMoneyFlag":0,"goJumpOrderCenter":false,"payInfo":null,"scaleSkuInfoListVO":null,"purchaseSkuInfoListVO":null,"noSupportHomeServiceSkuList":null,"msgMobile":null,"addressVO":{"pin":"xxx","areaName":"","provinceId":xx,"cityId":xx,"countyId":xx,"townId":xx,"paymentId":0,"selected":false,"addressDetail":"xx","mobile":"xx","idCard":"","phone":null,"email":null,"selfPickMobile":null,"selfPickPhone":null,"provinceName":null,"cityName":null,"countyName":null,"townName":null,"giftSenderConsigneeName":null,"giftSenderConsigneeMobile":null,"gcLat":0.0,"gcLng":0.0,"coord_type":0,"longitude":0.0,"latitude":0.0,"selfPickOptimize":0,"consigneeId":0,"selectedAddressType":0,"siteType":0,"helpMessage":null,"tipInfo":null,"cabinetAvailable":true,"limitKeyword":0,"specialRemark":null,"siteProvinceId":0,"siteCityId":0,"siteCountyId":0,"siteTownId":0,"skuSupported":false,"addressSupported":0,"isCod":0,"consigneeName":null,"pickVOname":null,"shipmentType":0,"retTag":0,"tagSource":0,"userDefinedTag":null,"newProvinceId":0,"newCityId":0,"newCountyId":0,"newTownId":0,"newProvinceName":null,"newCityName":null,"newCountyName":null,"newTownName":null,"checkLevel":0,"optimizePickID":0,"pickType":0,"dataSign":0,"overseas":0,"areaCode":null,"nameCode":null,"appSelfPickAddress":0,"associatePickId":0,"associateAddressId":0,"appId":null,"encryptText":null,"certNum":null,"used":false,"oldAddress":false,"mapping":false,"addressType":0,"fullAddress":"xxxx","postCode":null,"addressDefault":false,"addressName":null,"selfPickAddressShuntFlag":0,"pickId":0,"pickName":null,"pickVOselected":false,"mapUrl":null,"branchId":0,"canSelected":false,"address":null,"name":"xxx","message":null,"id":0},"msgUuid":null,"message":"xxxxxx鍟嗗搧鏃犺揣"} + # {'orderXml': None, 'overSea': False, 'noStockSkuIds': 'xxx', 'reqInfo': None, 'hasJxj': False, 'addedServiceList': None, 'cartXml': None, 'sign': None, 'pin': 'xxx', 'needCheckCode': False, 'success': False, 'resultCode': 600158, 'orderId': 0, 'submitSkuNum': 0, 'deductMoneyFlag': 0, 'goJumpOrderCenter': False, 'payInfo': None, 'scaleSkuInfoListVO': None, 'purchaseSkuInfoListVO': None, 'noSupportHomeServiceSkuList': None, 'msgMobile': None, 'addressVO': {'oldAddress': False, 'mapping': False, 'pin': 'xxx', 'areaName': '', 'provinceId': xx, 'cityId': xx, 'countyId': xx, 'townId': xx, 'paymentId': 0, 'selected': False, 'addressDetail': 'xxxx', 'mobile': 'xxxx', 'idCard': '', 'phone': None, 'email': None, 'selfPickMobile': None, 'selfPickPhone': None, 'provinceName': None, 'cityName': None, 'countyName': None, 'townName': None, 'giftSenderConsigneeName': None, 'giftSenderConsigneeMobile': None, 'gcLat': 0.0, 'gcLng': 0.0, 'coord_type': 0, 'longitude': 0.0, 'latitude': 0.0, 'selfPickOptimize': 0, 'consigneeId': 0, 'selectedAddressType': 0, 'newCityName': None, 'newCountyName': None, 'newTownName': None, 'checkLevel': 0, 'optimizePickID': 0, 'pickType': 0, 'dataSign': 0, 'overseas': 0, 'areaCode': None, 'nameCode': None, 'appSelfPickAddress': 0, 'associatePickId': 0, 'associateAddressId': 0, 'appId': None, 'encryptText': None, 'certNum': None, 'addressType': 0, 'fullAddress': 'xxxx', 'postCode': None, 'addressDefault': False, 'addressName': None, 'selfPickAddressShuntFlag': 0, 'pickId': 0, 'pickName': None, 'pickVOselected': False, 'mapUrl': None, 'branchId': 0, 'canSelected': False, 'siteType': 0, 'helpMessage': None, 'tipInfo': None, 'cabinetAvailable': True, 'limitKeyword': 0, 'specialRemark': None, 'siteProvinceId': 0, 'siteCityId': 0, 'siteCountyId': 0, 'siteTownId': 0, 'skuSupported': False, 'addressSupported': 0, 'isCod': 0, 'consigneeName': None, 'pickVOname': None, 'shipmentType': 0, 'retTag': 0, 'tagSource': 0, 'userDefinedTag': None, 'newProvinceId': 0, 'newCityId': 0, 'newCountyId': 0, 'newTownId': 0, 'newProvinceName': None, 'used': False, 'address': None, 'name': 'xx', 'message': None, 'id': 0}, 'msgUuid': None, 'message': 'xxxxxx鍟嗗搧鏃犺揣'} + # {"orderXml":null,"cartXml":null,"noStockSkuIds":"","reqInfo":null,"hasJxj":false,"overSea":false,"addedServiceList":null,"sign":null,"pin":null,"needCheckCode":true,"success":false,"resultCode":0,"orderId":0,"submitSkuNum":0,"deductMoneyFlag":0,"goJumpOrderCenter":false,"payInfo":null,"scaleSkuInfoListVO":null,"purchaseSkuInfoListVO":null,"noSupportHomeServiceSkuList":null,"msgMobile":null,"addressVO":null,"msgUuid":null,"message":"楠岃瘉鐮佷笉姝g‘锛岃閲嶆柊濉啓"} + # 涓嬪崟鎴愬姛 + # {'overSea': False, 'orderXml': None, 'cartXml': None, 'noStockSkuIds': '', 'reqInfo': None, 'hasJxj': False, 'addedServiceList': None, 'sign': None, 'pin': 'xxx', 'needCheckCode': False, 'success': True, 'resultCode': 0, 'orderId': 8740xxxxx, 'submitSkuNum': 1, 'deductMoneyFlag': 0, 'goJumpOrderCenter': False, 'payInfo': None, 'scaleSkuInfoListVO': None, 'purchaseSkuInfoListVO': None, 'noSupportHomeServiceSkuList': None, 'msgMobile': None, 'addressVO': None, 'msgUuid': None, 'message': None} + + if resp_json.get('success'): + logger.info('璁㈠崟鎻愪氦鎴愬姛! 璁㈠崟鍙凤細%s', resp_json.get('orderId')) + return True + else: + message, result_code = resp_json.get('message'), resp_json.get('resultCode') + if result_code == 0: + # self._save_invoice() + if '楠岃瘉鐮佷笉姝g‘'in message: + message = message + '(楠岃瘉鐮侀敊璇)' + else: + message = message + '(涓嬪崟鍟嗗搧鍙兘涓虹涓夋柟鍟嗗搧锛屽皢鍒囨崲涓烘櫘閫氬彂绁ㄨ繘琛屽皾璇)' + elif result_code == 60077: + message = message + '(鍙兘鏄喘鐗╄溅涓虹┖ 鎴 鏈嬀閫夎喘鐗╄溅涓晢鍝)' + elif result_code == 60123: + message = message + '(闇瑕佸湪payment_pwd鍙傛暟閰嶇疆鏀粯瀵嗙爜)' + for i in urls: + if sku_id in i: + urls.remove(i) + logger.info('璁㈠崟鎻愪氦澶辫触,閬垮厤姝诲惊鐜幓闄ゅ紓甯竔d[%s]',sku_id) + logger.info('璁㈠崟鎻愪氦澶辫触, 閿欒鐮侊細%s, 杩斿洖淇℃伅锛%s', result_code, message) + logger.info(resp_json) + return False + except Exception as e: + print(traceback.format_exc()) + continue ''' @@ -412,32 +424,26 @@ def item_removed(sku_id): def buyMask(sku_id): - for count in range(1, 2): - logger.info('绗琜%s/%s]娆″皾璇曟彁浜よ鍗', count, 3) - cancel_select_all_cart_item() - cart = cart_detail() - if sku_id in cart: - logger.info('%s 宸插湪璐墿杞︿腑锛岃皟鏁存暟閲忎负 %s', sku_id, 1) - cart_item = cart.get(sku_id) - change_item_num_in_cart( - sku_id=sku_id, - vender_id=cart_item.get('vender_id'), - num=1, - p_type=cart_item.get('p_type'), - target_id=cart_item.get('target_id'), - promo_id=cart_item.get('promo_id') - ) - else: - add_item_to_cart(sku_id) - risk_control = get_checkout_page_detail() - if len(risk_control) > 0: - if submit_order(risk_control): - return True - logger.info('浼戞伅%ss', 3) - time.sleep(3) + cancel_select_all_cart_item() + cart = cart_detail() + if sku_id in cart: + logger.info('%s 宸插湪璐墿杞︿腑锛岃皟鏁存暟閲忎负 %s', sku_id, 1) + cart_item = cart.get(sku_id) + change_item_num_in_cart( + sku_id=sku_id, + vender_id=cart_item.get('vender_id'), + num=1, + p_type=cart_item.get('p_type'), + target_id=cart_item.get('target_id'), + promo_id=cart_item.get('promo_id') + ) else: - logger.info('鎵ц缁撴潫锛屾彁浜よ鍗曞け璐ワ紒') - return False + add_item_to_cart(sku_id) + risk_control = get_checkout_page_detail() + if len(risk_control) > 0: + if submit_order(risk_control,sku_id): + return True + return False flag = 1 @@ -454,7 +460,7 @@ while (1): } logger.info('绗' + str(flag) + '娆 ') flag += 1 - for i in url: + for i in urls: # 鍟嗗搧url skuId = i.split('skuId=')[1].split('&')[0] skuidUrl = 'https://item.jd.com/' + skuId + '.html' @@ -477,7 +483,6 @@ while (1): logger.info('鏍¢獙鏄惁杩樺湪鐧诲綍') validate_cookies() except Exception as e: - import traceback print(traceback.format_exc()) time.sleep(10) diff --git a/jdBuyMask_V2.py b/jdBuyMask_V2.py index e99a4b5f8d9c7bd9db6d9c6dba73b1d2044f9310..4db76ea8c455491dae069d32512fcd9c5e37d96d 100644 --- a/jdBuyMask_V2.py +++ b/jdBuyMask_V2.py @@ -12,6 +12,7 @@ from bs4 import BeautifulSoup from log.jdlogger import logger from config.config import global_config from message.message import message +import traceback ''' 闇瑕佷慨鏀 @@ -297,7 +298,9 @@ def get_checkout_page_detail(): return risk_control -def submit_order(risk_control): +def submit_order(risk_control,sku_id): + + """鎻愪氦璁㈠崟 閲嶈锛 @@ -349,39 +352,46 @@ def submit_order(risk_control): "Connection": "keep-alive", 'Host': 'trade.jd.com', } - - try: - resp = session.post(url=url, data=data, headers=headers) - resp_json = json.loads(resp.text) - - # 杩斿洖淇℃伅绀轰緥锛 - # 涓嬪崟澶辫触 - # {'overSea': False, 'orderXml': None, 'cartXml': None, 'noStockSkuIds': '', 'reqInfo': None, 'hasJxj': False, 'addedServiceList': None, 'sign': None, 'pin': 'xxx', 'needCheckCode': False, 'success': False, 'resultCode': 60123, 'orderId': 0, 'submitSkuNum': 0, 'deductMoneyFlag': 0, 'goJumpOrderCenter': False, 'payInfo': None, 'scaleSkuInfoListVO': None, 'purchaseSkuInfoListVO': None, 'noSupportHomeServiceSkuList': None, 'msgMobile': None, 'addressVO': None, 'msgUuid': None, 'message': '璇疯緭鍏ユ敮浠樺瘑鐮侊紒'} - # {'overSea': False, 'cartXml': None, 'noStockSkuIds': '', 'reqInfo': None, 'hasJxj': False, 'addedServiceList': None, 'orderXml': None, 'sign': None, 'pin': 'xxx', 'needCheckCode': False, 'success': False, 'resultCode': 60017, 'orderId': 0, 'submitSkuNum': 0, 'deductMoneyFlag': 0, 'goJumpOrderCenter': False, 'payInfo': None, 'scaleSkuInfoListVO': None, 'purchaseSkuInfoListVO': None, 'noSupportHomeServiceSkuList': None, 'msgMobile': None, 'addressVO': None, 'msgUuid': None, 'message': '鎮ㄥ娆℃彁浜よ繃蹇紝璇风◢鍚庡啀璇'} - # {'overSea': False, 'orderXml': None, 'cartXml': None, 'noStockSkuIds': '', 'reqInfo': None, 'hasJxj': False, 'addedServiceList': None, 'sign': None, 'pin': 'xxx', 'needCheckCode': False, 'success': False, 'resultCode': 60077, 'orderId': 0, 'submitSkuNum': 0, 'deductMoneyFlag': 0, 'goJumpOrderCenter': False, 'payInfo': None, 'scaleSkuInfoListVO': None, 'purchaseSkuInfoListVO': None, 'noSupportHomeServiceSkuList': None, 'msgMobile': None, 'addressVO': None, 'msgUuid': None, 'message': '鑾峰彇鐢ㄦ埛璁㈠崟淇℃伅澶辫触'} - # {"cartXml":null,"noStockSkuIds":"xxx","reqInfo":null,"hasJxj":false,"addedServiceList":null,"overSea":false,"orderXml":null,"sign":null,"pin":"xxx","needCheckCode":false,"success":false,"resultCode":600157,"orderId":0,"submitSkuNum":0,"deductMoneyFlag":0,"goJumpOrderCenter":false,"payInfo":null,"scaleSkuInfoListVO":null,"purchaseSkuInfoListVO":null,"noSupportHomeServiceSkuList":null,"msgMobile":null,"addressVO":{"pin":"xxx","areaName":"","provinceId":xx,"cityId":xx,"countyId":xx,"townId":xx,"paymentId":0,"selected":false,"addressDetail":"xx","mobile":"xx","idCard":"","phone":null,"email":null,"selfPickMobile":null,"selfPickPhone":null,"provinceName":null,"cityName":null,"countyName":null,"townName":null,"giftSenderConsigneeName":null,"giftSenderConsigneeMobile":null,"gcLat":0.0,"gcLng":0.0,"coord_type":0,"longitude":0.0,"latitude":0.0,"selfPickOptimize":0,"consigneeId":0,"selectedAddressType":0,"siteType":0,"helpMessage":null,"tipInfo":null,"cabinetAvailable":true,"limitKeyword":0,"specialRemark":null,"siteProvinceId":0,"siteCityId":0,"siteCountyId":0,"siteTownId":0,"skuSupported":false,"addressSupported":0,"isCod":0,"consigneeName":null,"pickVOname":null,"shipmentType":0,"retTag":0,"tagSource":0,"userDefinedTag":null,"newProvinceId":0,"newCityId":0,"newCountyId":0,"newTownId":0,"newProvinceName":null,"newCityName":null,"newCountyName":null,"newTownName":null,"checkLevel":0,"optimizePickID":0,"pickType":0,"dataSign":0,"overseas":0,"areaCode":null,"nameCode":null,"appSelfPickAddress":0,"associatePickId":0,"associateAddressId":0,"appId":null,"encryptText":null,"certNum":null,"used":false,"oldAddress":false,"mapping":false,"addressType":0,"fullAddress":"xxxx","postCode":null,"addressDefault":false,"addressName":null,"selfPickAddressShuntFlag":0,"pickId":0,"pickName":null,"pickVOselected":false,"mapUrl":null,"branchId":0,"canSelected":false,"address":null,"name":"xxx","message":null,"id":0},"msgUuid":null,"message":"xxxxxx鍟嗗搧鏃犺揣"} - # {'orderXml': None, 'overSea': False, 'noStockSkuIds': 'xxx', 'reqInfo': None, 'hasJxj': False, 'addedServiceList': None, 'cartXml': None, 'sign': None, 'pin': 'xxx', 'needCheckCode': False, 'success': False, 'resultCode': 600158, 'orderId': 0, 'submitSkuNum': 0, 'deductMoneyFlag': 0, 'goJumpOrderCenter': False, 'payInfo': None, 'scaleSkuInfoListVO': None, 'purchaseSkuInfoListVO': None, 'noSupportHomeServiceSkuList': None, 'msgMobile': None, 'addressVO': {'oldAddress': False, 'mapping': False, 'pin': 'xxx', 'areaName': '', 'provinceId': xx, 'cityId': xx, 'countyId': xx, 'townId': xx, 'paymentId': 0, 'selected': False, 'addressDetail': 'xxxx', 'mobile': 'xxxx', 'idCard': '', 'phone': None, 'email': None, 'selfPickMobile': None, 'selfPickPhone': None, 'provinceName': None, 'cityName': None, 'countyName': None, 'townName': None, 'giftSenderConsigneeName': None, 'giftSenderConsigneeMobile': None, 'gcLat': 0.0, 'gcLng': 0.0, 'coord_type': 0, 'longitude': 0.0, 'latitude': 0.0, 'selfPickOptimize': 0, 'consigneeId': 0, 'selectedAddressType': 0, 'newCityName': None, 'newCountyName': None, 'newTownName': None, 'checkLevel': 0, 'optimizePickID': 0, 'pickType': 0, 'dataSign': 0, 'overseas': 0, 'areaCode': None, 'nameCode': None, 'appSelfPickAddress': 0, 'associatePickId': 0, 'associateAddressId': 0, 'appId': None, 'encryptText': None, 'certNum': None, 'addressType': 0, 'fullAddress': 'xxxx', 'postCode': None, 'addressDefault': False, 'addressName': None, 'selfPickAddressShuntFlag': 0, 'pickId': 0, 'pickName': None, 'pickVOselected': False, 'mapUrl': None, 'branchId': 0, 'canSelected': False, 'siteType': 0, 'helpMessage': None, 'tipInfo': None, 'cabinetAvailable': True, 'limitKeyword': 0, 'specialRemark': None, 'siteProvinceId': 0, 'siteCityId': 0, 'siteCountyId': 0, 'siteTownId': 0, 'skuSupported': False, 'addressSupported': 0, 'isCod': 0, 'consigneeName': None, 'pickVOname': None, 'shipmentType': 0, 'retTag': 0, 'tagSource': 0, 'userDefinedTag': None, 'newProvinceId': 0, 'newCityId': 0, 'newCountyId': 0, 'newTownId': 0, 'newProvinceName': None, 'used': False, 'address': None, 'name': 'xx', 'message': None, 'id': 0}, 'msgUuid': None, 'message': 'xxxxxx鍟嗗搧鏃犺揣'} - # 涓嬪崟鎴愬姛 - # {'overSea': False, 'orderXml': None, 'cartXml': None, 'noStockSkuIds': '', 'reqInfo': None, 'hasJxj': False, 'addedServiceList': None, 'sign': None, 'pin': 'xxx', 'needCheckCode': False, 'success': True, 'resultCode': 0, 'orderId': 8740xxxxx, 'submitSkuNum': 1, 'deductMoneyFlag': 0, 'goJumpOrderCenter': False, 'payInfo': None, 'scaleSkuInfoListVO': None, 'purchaseSkuInfoListVO': None, 'noSupportHomeServiceSkuList': None, 'msgMobile': None, 'addressVO': None, 'msgUuid': None, 'message': None} - - if resp_json.get('success'): - logger.info('璁㈠崟鎻愪氦鎴愬姛! 璁㈠崟鍙凤細%s', resp_json.get('orderId')) - return True - else: - message, result_code = resp_json.get('message'), resp_json.get('resultCode') - if result_code == 0: - # self._save_invoice() - message = message + '(涓嬪崟鍟嗗搧鍙兘涓虹涓夋柟鍟嗗搧锛屽皢鍒囨崲涓烘櫘閫氬彂绁ㄨ繘琛屽皾璇)' - elif result_code == 60077: - message = message + '(鍙兘鏄喘鐗╄溅涓虹┖ 鎴 鏈嬀閫夎喘鐗╄溅涓晢鍝)' - elif result_code == 60123: - message = message + '(闇瑕佸湪payment_pwd鍙傛暟閰嶇疆鏀粯瀵嗙爜)' - logger.info('璁㈠崟鎻愪氦澶辫触, 閿欒鐮侊細%s, 杩斿洖淇℃伅锛%s', result_code, message) - logger.info(resp_json) - return False - except Exception as e: - logger.error(e) - return False + for count in range(1, 2): + logger.info('绗琜%s/%s]娆″皾璇曟彁浜よ鍗', count, 3) + try: + resp = session.post(url=url, data=data, headers=headers) + resp_json = json.loads(resp.text) + + # 杩斿洖淇℃伅绀轰緥锛 + # 涓嬪崟澶辫触 + # {'overSea': False, 'orderXml': None, 'cartXml': None, 'noStockSkuIds': '', 'reqInfo': None, 'hasJxj': False, 'addedServiceList': None, 'sign': None, 'pin': 'xxx', 'needCheckCode': False, 'success': False, 'resultCode': 60123, 'orderId': 0, 'submitSkuNum': 0, 'deductMoneyFlag': 0, 'goJumpOrderCenter': False, 'payInfo': None, 'scaleSkuInfoListVO': None, 'purchaseSkuInfoListVO': None, 'noSupportHomeServiceSkuList': None, 'msgMobile': None, 'addressVO': None, 'msgUuid': None, 'message': '璇疯緭鍏ユ敮浠樺瘑鐮侊紒'} + # {'overSea': False, 'cartXml': None, 'noStockSkuIds': '', 'reqInfo': None, 'hasJxj': False, 'addedServiceList': None, 'orderXml': None, 'sign': None, 'pin': 'xxx', 'needCheckCode': False, 'success': False, 'resultCode': 60017, 'orderId': 0, 'submitSkuNum': 0, 'deductMoneyFlag': 0, 'goJumpOrderCenter': False, 'payInfo': None, 'scaleSkuInfoListVO': None, 'purchaseSkuInfoListVO': None, 'noSupportHomeServiceSkuList': None, 'msgMobile': None, 'addressVO': None, 'msgUuid': None, 'message': '鎮ㄥ娆℃彁浜よ繃蹇紝璇风◢鍚庡啀璇'} + # {'overSea': False, 'orderXml': None, 'cartXml': None, 'noStockSkuIds': '', 'reqInfo': None, 'hasJxj': False, 'addedServiceList': None, 'sign': None, 'pin': 'xxx', 'needCheckCode': False, 'success': False, 'resultCode': 60077, 'orderId': 0, 'submitSkuNum': 0, 'deductMoneyFlag': 0, 'goJumpOrderCenter': False, 'payInfo': None, 'scaleSkuInfoListVO': None, 'purchaseSkuInfoListVO': None, 'noSupportHomeServiceSkuList': None, 'msgMobile': None, 'addressVO': None, 'msgUuid': None, 'message': '鑾峰彇鐢ㄦ埛璁㈠崟淇℃伅澶辫触'} + # {"cartXml":null,"noStockSkuIds":"xxx","reqInfo":null,"hasJxj":false,"addedServiceList":null,"overSea":false,"orderXml":null,"sign":null,"pin":"xxx","needCheckCode":false,"success":false,"resultCode":600157,"orderId":0,"submitSkuNum":0,"deductMoneyFlag":0,"goJumpOrderCenter":false,"payInfo":null,"scaleSkuInfoListVO":null,"purchaseSkuInfoListVO":null,"noSupportHomeServiceSkuList":null,"msgMobile":null,"addressVO":{"pin":"xxx","areaName":"","provinceId":xx,"cityId":xx,"countyId":xx,"townId":xx,"paymentId":0,"selected":false,"addressDetail":"xx","mobile":"xx","idCard":"","phone":null,"email":null,"selfPickMobile":null,"selfPickPhone":null,"provinceName":null,"cityName":null,"countyName":null,"townName":null,"giftSenderConsigneeName":null,"giftSenderConsigneeMobile":null,"gcLat":0.0,"gcLng":0.0,"coord_type":0,"longitude":0.0,"latitude":0.0,"selfPickOptimize":0,"consigneeId":0,"selectedAddressType":0,"siteType":0,"helpMessage":null,"tipInfo":null,"cabinetAvailable":true,"limitKeyword":0,"specialRemark":null,"siteProvinceId":0,"siteCityId":0,"siteCountyId":0,"siteTownId":0,"skuSupported":false,"addressSupported":0,"isCod":0,"consigneeName":null,"pickVOname":null,"shipmentType":0,"retTag":0,"tagSource":0,"userDefinedTag":null,"newProvinceId":0,"newCityId":0,"newCountyId":0,"newTownId":0,"newProvinceName":null,"newCityName":null,"newCountyName":null,"newTownName":null,"checkLevel":0,"optimizePickID":0,"pickType":0,"dataSign":0,"overseas":0,"areaCode":null,"nameCode":null,"appSelfPickAddress":0,"associatePickId":0,"associateAddressId":0,"appId":null,"encryptText":null,"certNum":null,"used":false,"oldAddress":false,"mapping":false,"addressType":0,"fullAddress":"xxxx","postCode":null,"addressDefault":false,"addressName":null,"selfPickAddressShuntFlag":0,"pickId":0,"pickName":null,"pickVOselected":false,"mapUrl":null,"branchId":0,"canSelected":false,"address":null,"name":"xxx","message":null,"id":0},"msgUuid":null,"message":"xxxxxx鍟嗗搧鏃犺揣"} + # {'orderXml': None, 'overSea': False, 'noStockSkuIds': 'xxx', 'reqInfo': None, 'hasJxj': False, 'addedServiceList': None, 'cartXml': None, 'sign': None, 'pin': 'xxx', 'needCheckCode': False, 'success': False, 'resultCode': 600158, 'orderId': 0, 'submitSkuNum': 0, 'deductMoneyFlag': 0, 'goJumpOrderCenter': False, 'payInfo': None, 'scaleSkuInfoListVO': None, 'purchaseSkuInfoListVO': None, 'noSupportHomeServiceSkuList': None, 'msgMobile': None, 'addressVO': {'oldAddress': False, 'mapping': False, 'pin': 'xxx', 'areaName': '', 'provinceId': xx, 'cityId': xx, 'countyId': xx, 'townId': xx, 'paymentId': 0, 'selected': False, 'addressDetail': 'xxxx', 'mobile': 'xxxx', 'idCard': '', 'phone': None, 'email': None, 'selfPickMobile': None, 'selfPickPhone': None, 'provinceName': None, 'cityName': None, 'countyName': None, 'townName': None, 'giftSenderConsigneeName': None, 'giftSenderConsigneeMobile': None, 'gcLat': 0.0, 'gcLng': 0.0, 'coord_type': 0, 'longitude': 0.0, 'latitude': 0.0, 'selfPickOptimize': 0, 'consigneeId': 0, 'selectedAddressType': 0, 'newCityName': None, 'newCountyName': None, 'newTownName': None, 'checkLevel': 0, 'optimizePickID': 0, 'pickType': 0, 'dataSign': 0, 'overseas': 0, 'areaCode': None, 'nameCode': None, 'appSelfPickAddress': 0, 'associatePickId': 0, 'associateAddressId': 0, 'appId': None, 'encryptText': None, 'certNum': None, 'addressType': 0, 'fullAddress': 'xxxx', 'postCode': None, 'addressDefault': False, 'addressName': None, 'selfPickAddressShuntFlag': 0, 'pickId': 0, 'pickName': None, 'pickVOselected': False, 'mapUrl': None, 'branchId': 0, 'canSelected': False, 'siteType': 0, 'helpMessage': None, 'tipInfo': None, 'cabinetAvailable': True, 'limitKeyword': 0, 'specialRemark': None, 'siteProvinceId': 0, 'siteCityId': 0, 'siteCountyId': 0, 'siteTownId': 0, 'skuSupported': False, 'addressSupported': 0, 'isCod': 0, 'consigneeName': None, 'pickVOname': None, 'shipmentType': 0, 'retTag': 0, 'tagSource': 0, 'userDefinedTag': None, 'newProvinceId': 0, 'newCityId': 0, 'newCountyId': 0, 'newTownId': 0, 'newProvinceName': None, 'used': False, 'address': None, 'name': 'xx', 'message': None, 'id': 0}, 'msgUuid': None, 'message': 'xxxxxx鍟嗗搧鏃犺揣'} + # {"orderXml":null,"cartXml":null,"noStockSkuIds":"","reqInfo":null,"hasJxj":false,"overSea":false,"addedServiceList":null,"sign":null,"pin":null,"needCheckCode":true,"success":false,"resultCode":0,"orderId":0,"submitSkuNum":0,"deductMoneyFlag":0,"goJumpOrderCenter":false,"payInfo":null,"scaleSkuInfoListVO":null,"purchaseSkuInfoListVO":null,"noSupportHomeServiceSkuList":null,"msgMobile":null,"addressVO":null,"msgUuid":null,"message":"楠岃瘉鐮佷笉姝g‘锛岃閲嶆柊濉啓"} + # 涓嬪崟鎴愬姛 + # {'overSea': False, 'orderXml': None, 'cartXml': None, 'noStockSkuIds': '', 'reqInfo': None, 'hasJxj': False, 'addedServiceList': None, 'sign': None, 'pin': 'xxx', 'needCheckCode': False, 'success': True, 'resultCode': 0, 'orderId': 8740xxxxx, 'submitSkuNum': 1, 'deductMoneyFlag': 0, 'goJumpOrderCenter': False, 'payInfo': None, 'scaleSkuInfoListVO': None, 'purchaseSkuInfoListVO': None, 'noSupportHomeServiceSkuList': None, 'msgMobile': None, 'addressVO': None, 'msgUuid': None, 'message': None} + + if resp_json.get('success'): + logger.info('璁㈠崟鎻愪氦鎴愬姛! 璁㈠崟鍙凤細%s', resp_json.get('orderId')) + return True + else: + message, result_code = resp_json.get('message'), resp_json.get('resultCode') + if result_code == 0: + # self._save_invoice() + if '楠岃瘉鐮佷笉姝g‘'in message: + message = message + '(楠岃瘉鐮侀敊璇)' + else: + message = message + '(涓嬪崟鍟嗗搧鍙兘涓虹涓夋柟鍟嗗搧锛屽皢鍒囨崲涓烘櫘閫氬彂绁ㄨ繘琛屽皾璇)' + elif result_code == 60077: + message = message + '(鍙兘鏄喘鐗╄溅涓虹┖ 鎴 鏈嬀閫夎喘鐗╄溅涓晢鍝)' + elif result_code == 60123: + message = message + '(闇瑕佸湪payment_pwd鍙傛暟閰嶇疆鏀粯瀵嗙爜)' + skuids.remove(sku_id) + logger.info('璁㈠崟鎻愪氦澶辫触,閬垮厤姝诲惊鐜幓闄ゅ紓甯竔d[%s]',sku_id) + logger.info('璁㈠崟鎻愪氦澶辫触, 閿欒鐮侊細%s, 杩斿洖淇℃伅锛%s', result_code, message) + logger.info(resp_json) + return False + except Exception as e: + print(traceback.format_exc()) + continue ''' @@ -409,32 +419,27 @@ def item_removed(sku_id): def buyMask(sku_id): - for count in range(1, 2): - logger.info('绗琜%s/%s]娆″皾璇曟彁浜よ鍗', count, 3) - cancel_select_all_cart_item() - cart = cart_detail() - if sku_id in cart: - logger.info('%s 宸插湪璐墿杞︿腑锛岃皟鏁存暟閲忎负 %s', sku_id, 1) - cart_item = cart.get(sku_id) - change_item_num_in_cart( - sku_id=sku_id, - vender_id=cart_item.get('vender_id'), - num=1, - p_type=cart_item.get('p_type'), - target_id=cart_item.get('target_id'), - promo_id=cart_item.get('promo_id') - ) - else: - add_item_to_cart(sku_id) - risk_control = get_checkout_page_detail() - if len(risk_control) > 0: - if submit_order(risk_control): - return True - logger.info('浼戞伅%ss', 3) - time.sleep(3) + cancel_select_all_cart_item() + cart = cart_detail() + if sku_id in cart: + logger.info('%s 宸插湪璐墿杞︿腑锛岃皟鏁存暟閲忎负 %s', sku_id, 1) + cart_item = cart.get(sku_id) + change_item_num_in_cart( + sku_id=sku_id, + vender_id=cart_item.get('vender_id'), + num=1, + p_type=cart_item.get('p_type'), + target_id=cart_item.get('target_id'), + promo_id=cart_item.get('promo_id') + ) else: - logger.info('鎵ц缁撴潫锛屾彁浜よ鍗曞け璐ワ紒') - return False + add_item_to_cart(sku_id) + risk_control = get_checkout_page_detail() + if len(risk_control) > 0: + if submit_order(risk_control,sku_id): + return True + return False + ''' @@ -511,7 +516,6 @@ while (1): logger.info('鏍¢獙鏄惁杩樺湪鐧诲綍') validate_cookies() except Exception as e: - import traceback print(traceback.format_exc()) time.sleep(10)