Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

新增查询本地生活服务订单信息 #196

Open
wants to merge 27 commits into
base: master
Choose a base branch
from
Open
Changes from 1 commit
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
690ca22
Update README.md
huaisha1224 Jul 22, 2021
f18804f
Update README.md
huaisha1224 Jul 22, 2021
a81a870
Update README.md
huaisha1224 Jul 22, 2021
78b4e9a
Update README.md
huaisha1224 Jul 22, 2021
3dbe6fb
Update jd_assistant.py
huaisha1224 Jul 22, 2021
2972f1e
Update README.md
huaisha1224 Jul 23, 2021
34dece8
Update README.md
huaisha1224 Jul 23, 2021
aa49ae5
Update jd_assistant.py
huaisha1224 Jul 23, 2021
24f12eb
Merge branch 'master' of https://github.com/huaisha1224/jd-assistant
huaisha1224 Jul 23, 2021
f3cfdb3
new get_order_vercode
huaisha1224 Jul 25, 2021
95ada5e
Update README.md
huaisha1224 Jul 26, 2021
39ed4bb
Update README.md
huaisha1224 Jul 26, 2021
a6f1cde
增加异常错误处理
huaisha1224 Jul 30, 2021
965e6aa
Merge branch 'master' of https://github.com/huaisha1224/jd-assistant
huaisha1224 Jul 30, 2021
57c5318
Update jd_assistant.py
huaisha1224 Aug 3, 2021
c03476e
Update README.md
huaisha1224 Aug 3, 2021
0dbbec0
Update jd_assistant.py
huaisha1224 Aug 5, 2021
d1c10d2
Merge branch 'master' of https://github.com/huaisha1224/jd-assistant
huaisha1224 Aug 5, 2021
edbe55d
Update README.md
huaisha1224 Aug 5, 2021
c4ffe79
Update log.py
huaisha1224 Aug 6, 2021
a8cfa95
增加验证码消费时间输出
huaisha1224 Aug 12, 2021
28fc50f
代码优化
huaisha1224 Aug 14, 2021
1ed89c6
支持提交数据到石墨文档
huaisha1224 Aug 22, 2021
8b73b9a
Update README.md
huaisha1224 Aug 23, 2021
40778b5
Update shimo.py
huaisha1224 Aug 24, 2021
1893796
Merge branch 'master' of https://github.com/huaisha1224/jd-assistant
huaisha1224 Aug 24, 2021
0cb8f8d
1
huaisha1224 Sep 6, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
new get_order_vercode
新增get_order_vercode函数用来提取本地服务订单中的验证码信息
huaisha1224 committed Jul 25, 2021
commit f3cfdb306bf838bc5423805d85be67f8e92b116f
149 changes: 98 additions & 51 deletions jd_assistant.py
Original file line number Diff line number Diff line change
@@ -1032,14 +1032,13 @@ def get_order_info(self, unpaid=True):
return
soup = BeautifulSoup(resp.text, "html.parser")

# logger.info('************************订单列表页查询************************')
logger.info('************************订单列表页查询************************')
order_table = soup.find('table', {'class': 'order-tb'})
table_bodies = order_table.select('tbody')
exist_order = False
for table_body in table_bodies:
# get order status
order_status = get_tag_value(table_body.select('span.order-status')).replace("订单状态:", "")

# check if order is waiting for payment
# wait_payment = bool(table_body.select('a.btn-pay'))
wait_payment = "等待付款" in order_status
@@ -1050,12 +1049,9 @@ def get_order_info(self, unpaid=True):

exist_order = True

# 获取订单时间、订单ID
tr_th = table_body.select('tr.tr-th')[0]
order_time = get_tag_value(tr_th.select('span.dealtime'))
order_id = get_tag_value(tr_th.select('span.number a'))
#print(tr_th)
self.get_order_vercode(order_id) #调用查询验证码函数
# get sum_price, pay_method
sum_price = ''
pay_method = ''
@@ -1078,58 +1074,15 @@ def get_order_info(self, unpaid=True):
quantity = get_tag_value(tr_bd.select('div.goods-number'))[1:]
items_dict[item_id] = quantity

# order_info_format = '下单时间:{0}----订单号:{1}----商品列表:{2}----订单状态:{3}----总金额:{4}元----付款方式:{5}'
# logger.info(order_info_format.format(order_time, order_id, parse_items_dict(items_dict), order_status,
# sum_price, pay_method))
order_info_format = '下单时间:{0}----订单号:{1}----商品列表:{2}----订单状态:{3}----总金额:{4}元----付款方式:{5}'
logger.info(order_info_format.format(order_time, order_id, parse_items_dict(items_dict), order_status,
sum_price, pay_method))

if not exist_order:
logger.info('订单查询为空')
except Exception as e:
logger.error(e)

@check_login
def get_order_vercode(self, orderId):
"""
获取已购订单的验证码
先登录订单中心获取所有订单、通过订单查询验证码
"""
#print(orderId)
url = "http://locdetails.jd.com/pc/locdetail?orderId={}&modelId=1".format(orderId)
payload = {
'search': 0,
'd': 1,
's': 4096,
} # Orders for nearly three months
headers = {
'User-Agent': self.user_agent,
'Referer': 'https://passport.jd.com/uc/login?ltype=logout',
}

try:
resp = self.sess.get(url=url, params=payload, headers=headers)
if not response_status(resp):
logger.error('获取订单页信息失败')
return
soup = BeautifulSoup(resp.text, "html.parser")
# logger.info('************************查询订单验证码************************')

order_vercode_str = soup.select('td.tr-vercode.un-use')
order_vercode_status = soup.select('td.un-use')
#print(order_vercode_status)
#print(order_vercode_str)
#pattern = (r'\d{12}')
order_vercode = re.findall(r'\d{12}', str(order_vercode_str))[0] #订单验证码

if re.findall(r'未消费', str(order_vercode_status)):
order_status = re.findall(r'未消费', str(order_vercode_status))[0] #消费状态
if order_status:
print("订单号:", orderId, " 验证码:",order_vercode, " 消费状态:", order_status)
else:
print("订单号:", orderId, " 验证码:",order_vercode)

except Exception as e:
logger.error(e)

@deprecated
def _get_seckill_url(self, sku_id):
"""获取商品的抢购链接
@@ -1457,3 +1410,97 @@ def buy_item_in_stock(self, sku_ids, area, wait_all=False, stock_interval=3, sub
return

time.sleep(stock_interval)

@check_login
def get_order_vercode(self, unpaid_new=False):
"""获取已购本地服务订单的验证码已经验证码状态
登录订单中心获取所有订单
通过本地服务订单接口查询是否为本地服务订单类型
查询验证码、并记录消费状态
:
:vercode_url: 本地服务订单接口
"""
url = 'https://order.jd.com/center/list.action'
payload = {
'search': 0,
'd': 1,
's': 4096,
} # Orders for nearly three months
headers = {
'User-Agent': self.user_agent,
'Referer': 'https://passport.jd.com/uc/login?ltype=logout',
}

try:
resp = self.sess.get(url=url, params=payload, headers=headers)
if not response_status(resp):
logger.error('获取订单页信息失败')
return
soup = BeautifulSoup(resp.text, "html.parser")
#print(soup)

#logger.info('************************订单列表页查询************************')
order_table = soup.find('table', {'class': 'order-tb'})
table_bodies = order_table.select('tbody')
exist_order = False
for table_body in table_bodies:
# get order status
order_status = get_tag_value(table_body.select('span.order-status')).replace("订单状态:", "")
wait_payment = "等待付款" in order_status

# only show unpaid orders if unpaid=True
if unpaid_new and (not wait_payment):
continue
exist_order = True

# 获取订单时间、订单ID
tr_th = table_body.select('tr.tr-th')[0]
order_time = get_tag_value(tr_th.select('span.dealtime'))
order_id = get_tag_value(tr_th.select('span.number a'))
#print("start")
# 本地服务订单接口查询查询消费验证码
vercode_url = "http://locdetails.jd.com/pc/locdetail?orderId={}&modelId=1".format(order_id)
payload = {
'search': 0,
'd': 1,
's': 4096,
} # Orders for nearly three months
headers = {
'User-Agent': self.user_agent,
'Referer': 'https://passport.jd.com/uc/login?ltype=logout',
}

try:
resp = self.sess.get(url=vercode_url, params=payload, headers=headers)
if not response_status(resp):
logger.error('获取订单验证码页信息失败')
return
vercode_soup = BeautifulSoup(resp.text, "html.parser")
order_type = vercode_soup.select('h2')

#通过本地服务订单接口查询订单时非本地服务器订单会提示"您的账号与订单信息不匹配或非loc订单,请重新跳转"

if re.search(r'您的账号', str(order_type)): #判断订单是否为本地服务类型订单
order_info_format = '下单时间: {0}---订单号: {1}----{2}'
logger.info(order_info_format.format(order_time, order_id, "非本地服务订单"))
else: #没有关键词说明是本地服务订单类型
order_vercode_str = vercode_soup.select('td.tr-vercode.un-use')
order_vercode_status = vercode_soup.select('td.un-use')
order_vercode = re.findall(r'\d{12}', str(order_vercode_str))[0] #订单验证码

if re.findall(r'未消费', str(order_vercode_status)):
vercode_status = re.findall(r'未消费', str(order_vercode_status))[0] #消费状态
if vercode_status:
order_info_format = '下单时间: {0}---订单号: {1}---验证码: {2} ---消费状态: {3}'
logger.info(order_info_format.format(order_time, order_id, order_vercode, vercode_status))
else:
order_info_format = '下单时间: {0}---订单号: {1}---验证码: {2}----消费状态: {3}'
logger.info(order_info_format.format(order_time, order_id, order_vercode, "已消费"))

except Exception as e:
logger.error(e)

if not exist_order:
logger.info('订单查询为空')
except Exception as e:
logger.error(e)