main.py 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. import configparser
  2. import os,sys,re,shutil
  3. import subprocess
  4. import time
  5. import datetime
  6. import argparse
  7. import logging
  8. from selenium import webdriver
  9. from selenium.webdriver import ActionChains
  10. from taobao.mail.mail_sender import MailSender
  11. from util.qiniuUtil import *
  12. from __init__ import *
  13. from taobao.csdn.download import CsdnDownloader
  14. from mail.mail_message import *
  15. from mail.mail_sender import *
  16. from mail.mail_sender_browser import MailSenderBrowser
  17. from taobao.order_bot import TaobaoClimber
  18. from util.str_util import print_msg, send_mail
  19. logger = logging.getLogger(__name__)
  20. logger.setLevel(logging.DEBUG)
  21. # 再创建一个handler,用于输出到控制台
  22. ch = logging.StreamHandler()
  23. ch.setLevel(logging.DEBUG)
  24. # 定义handler的输出格式
  25. formatter = logging.Formatter(
  26. '%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s')
  27. ch.setFormatter(formatter)
  28. # 给logger添加handler
  29. logger.addHandler(ch)
  30. def set_args():
  31. '''
  32. write config to config/conf.ini
  33. '''
  34. cf = configparser.ConfigParser()
  35. cf.read('config/conf.ini')
  36. if not cf.has_section("taobao"):
  37. cf.add_section("taobao")
  38. cf.set("taobao","username","zhangsan")
  39. cf.set("taobao","password","1346")
  40. cf.set("taobao","shelve_url","https://taobao.com/xx")
  41. # save
  42. with open('config/conf.ini', 'w') as f:
  43. cf.write(f)
  44. def get_args()->configparser.ConfigParser:
  45. parser = argparse.ArgumentParser()
  46. parser.add_argument('-c', '--conf', help='config file path', default='config/conf.ini')
  47. args = parser.parse_args()
  48. conf_file = args.conf
  49. if not os.path.exists(conf_file):
  50. print("配置文件不存在!")
  51. sys.exit(1)
  52. cf = configparser.ConfigParser.ConfigParser()
  53. cf.read(conf_file)
  54. return cf
  55. if __name__ == '__main__':
  56. cf=get_args()
  57. climber = TaobaoClimber(cf.get("taobao","username"), cf.get("taobao","password"))
  58. downloader = CsdnDownloader(cf.get("csdn","usernmae"), cf.get("csdn","password"))
  59. sender = MailSender(cf.get("mail","username"), cf.get("mail","authorcode"))
  60. sender_browser = MailSenderBrowser(cf.get("mail","username"), cf.get("mail","password"), cf.get("mail","password2"))
  61. # 2.实例化driver
  62. driver = webdriver.Firefox() # 应将浏览器驱动放于python根目录下,且python已配置path环境变量
  63. action = ActionChains(driver)
  64. driver.maximize_window() # 浏览器最大化
  65. driver.set_page_load_timeout(cf.get("other","delay_wait")) # 设定页面加载限制时间
  66. TaobaoClimber.driver = CsdnDownloader.driver = MailSenderBrowser.driver = driver
  67. TaobaoClimber.action = CsdnDownloader.action = MailSenderBrowser.action = action
  68. # 3.建立邮箱标签页
  69. if mail_send_type == 2:
  70. driver.execute_script("window.open('')")
  71. # 正则:解析留言内容
  72. re_note = re.compile(
  73. ur"留言:\s*([\w.-]+@[\w.-]+\.\w+)\s+((?:https?://)?[-A-Za-z0-9+&@#/%?=~_|!,.;]+)\s*")
  74. # 休眠总时间
  75. sleep_total_time = 0
  76. # 存在未留言订单
  77. exists_no_note_order = False
  78. # 2.1上架宝贝
  79. climber.shelve()
  80. is_running = True
  81. while is_running:
  82. # 2.2爬取订单
  83. orders = climber.climb()
  84. orders_len = len(orders)
  85. for order in orders:
  86. if downloader.download_count >= download_total:
  87. send_mail(sender, message_over_download_total, orders_len)
  88. is_running = False
  89. break
  90. note_array = re.findall(re_note, order[3])
  91. if len(note_array) != 1:
  92. exists_no_note_order = True
  93. continue
  94. order_info = "【淘宝】已产生可操作订单:订单号:%s\t订单日期:%s \t买家:%s\t备注:%s" % order
  95. print_msg(order_info)
  96. user_to = note_array[0][0]
  97. remote_url = note_array[0][1]
  98. # 2.3下载资源
  99. local_path = downloader.download(remote_url, local_dir)
  100. if local_path is None:
  101. send_mail(sender, message_download_false, order[0])
  102. continue
  103. else:
  104. print_msg("【CSDN】" + user_to + "的文件下载成功,本地路径:" + local_path)
  105. orders_len -= 1
  106. # 2.4进行下架判断
  107. if downloader.download_count == download_total - 1:
  108. if climber.unshelve() is False:
  109. send_mail(sender, message_unshelve_false, downloader.download_count)
  110. # 2.5 发送邮件
  111. if mail_send_type == 0:
  112. download_url_text = server_file_url + os.path.basename(local_path)
  113. if sender.send(Mail(user_to, download_url_text)):
  114. print_msg("【邮件】" + user_to + "的邮件发送成功")
  115. else:
  116. send_mail(sender, message_send_false, order[0])
  117. continue
  118. elif mail_send_type == 1:
  119. if sender.send(Mail(user_to, local_path, 2)):
  120. print_msg("【邮件】" + user_to + "的邮件发送成功")
  121. else:
  122. send_mail(sender, message_send_false, order[0])
  123. continue
  124. elif mail_send_type == 2:
  125. ret = sender_browser.send(user_to, local_path)
  126. if ret is None:
  127. print_msg("【邮件-浏览器】" + user_to + "的邮件发送成功")
  128. else: # 发送失败
  129. send_mail(sender, message_send_mail_error, order[0], ret)
  130. continue
  131. else:
  132. download_url_text = upload_file(local_path)
  133. if sender.send(Mail(user_to, download_url_text)):
  134. print_msg("【七牛】" + user_to + "的邮件发送成功")
  135. else:
  136. send_mail(sender, message_send_false, order[0])
  137. continue
  138. # 2.6 订单改为已发货
  139. if climber.delivered(order[0]) is False:
  140. send_mail(sender, message_delivered_false, order[0])
  141. time.sleep(check_order_period) # 每指定时间抓一次
  142. sleep_total_time += check_order_period
  143. if sleep_total_time >= check_refunding_period: # 每指定时间检查一次退款和未留言订单
  144. if climber.exists_refunding():
  145. send_mail(sender, message_exists_refunding)
  146. if exists_no_note_order:
  147. send_mail(sender, message_notice_for_no_note)
  148. exists_no_note_order = False
  149. sleep_total_time = 0