detail.py 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. from selenium import webdriver
  2. from selenium.webdriver.support.wait import WebDriverWait
  3. from selenium.webdriver.common.by import By
  4. from time import sleep
  5. import time
  6. import json
  7. import auth
  8. import requests
  9. import main
  10. # webdriver 下载地址:http://chromedriver.storage.googleapis.com/index.html
  11. # 放置于:把文件存放在python根目录下,例如:C:\xxx\Python\Python38下
  12. def get_detail(url_login, url_detail):
  13. options = webdriver.ChromeOptions()
  14. options.add_experimental_option('excludeSwitches', ['enable-automation'])
  15. # options.add_argument(r'--headless')
  16. # # options.add_argument(r'user-data-dir=C:\Users\Administrator\AppData\Local\Google\Chrome')
  17. # # options.add_argument('--disable-gpu')
  18. browser = webdriver.Chrome(options=options)
  19. try:
  20. wait = WebDriverWait(browser, 15)
  21. browser.maximize_window()
  22. browser.implicitly_wait(3) # 设置等待3秒后打开目标网页
  23. browser.implicitly_wait(3)
  24. # 登录页面
  25. browser.get(url=url_login)
  26. auth.add_cookie(browser)
  27. # 进入数据详情页
  28. browser.get(url_detail)
  29. sleep(10)
  30. if not auth.check_login(browser):
  31. print('登录失败')
  32. send_wechat_info("抖音线索登录失败")
  33. return
  34. # 进入数据详情页
  35. # browser.get(url_detail)
  36. sleep(5)
  37. while True:
  38. if time.localtime().tm_hour == 0: # 这个时间点停止
  39. break
  40. # 切换线索推荐tab 为了刷新
  41. click_sales_clue_push(browser)
  42. sleep(5 * 60) # 停止5分钟
  43. # click_sales_clue_list(browser)
  44. browser.get(url_detail)
  45. # 抓取数据
  46. # get_table(browser)
  47. click_page(browser)
  48. # 退出前更新一次cookie
  49. auth.record_cookie(browser)
  50. sleep(60 * 60*2) # 停止5分钟
  51. browser.quit()
  52. except Exception as e:
  53. print('err_detail')
  54. print(e)
  55. browser.quit()
  56. return
  57. # 1:姓名,2:电话,3:线索创建时间,4:互动类型,5:线索类型,6:最新互动记录,7:线索渠道,8:来源抖音号,9:分配状态
  58. # 10:自动定位城市,11:手动填写地域,12:通话状态,13:最近互动时间,14:来源抖音号类型
  59. key_dic = {1: "name", 2: "phone", 3: "create_time", 4: "status_interact", 5: "status_clue",
  60. 6: "new_interact", 7: "clue_channel", 8: "from_douyin", 9: "status_distribution",
  61. 10: "city", 11: "city_hand", 12: "status_call", 13: "last_time", 14: "from"}
  62. # 点击线索推送
  63. def click_sales_clue_push(browser):
  64. print("点击线索推荐")
  65. try:
  66. browser.find_element(By.ID, "PSalesCluePush").click()
  67. except:
  68. print("没有找到线索管理tab")
  69. sleep(5)
  70. # 点击线索管理
  71. def click_sales_clue_list(browser):
  72. browser.find_element(By.ID, "PSalesClueList").click()
  73. print("点击线索管理")
  74. sleep(5)
  75. # 判断是否需要分页
  76. def click_page(browser):
  77. page_items = browser.find_elements(By.CLASS_NAME, "leads-pager-item")
  78. num = len(page_items)
  79. if num <= 3:
  80. print("只有1页")
  81. get_table(browser)
  82. return
  83. for page in range(1, num - 3):
  84. page_items[num - 1].click()
  85. sleep(10)
  86. get_table(browser)
  87. # 读取数据
  88. def get_table(browser):
  89. # tr html的结构如下示例:
  90. # <tr>
  91. # <td>name</td> <td>phone</td>...
  92. # </tr>'
  93. tr_list = browser.find_elements(By.CLASS_NAME, "listTableRow")
  94. for tr in tr_list:
  95. tds = tr.find_elements(By.TAG_NAME, "td")
  96. data = {}
  97. for i in range(1, len(key_dic)):
  98. data[key_dic[i]] = tds[i].text
  99. # 给服务器传数据
  100. send_data(data)
  101. # 发送数据
  102. def send_data(data):
  103. print(data)
  104. headers = {'Content-Type': 'application/json'}
  105. response = requests.post(url=main.URL_SEND_DATA, headers=headers, data=json.dumps(data))
  106. print(response)
  107. return ''
  108. # 发送企业微信消息
  109. def send_wechat_info(message):
  110. print(message)
  111. data = {
  112. "msgtype": "text",
  113. "text": {
  114. "content": message
  115. }
  116. }
  117. headers = {'Content-Type': 'application/json'}
  118. response = requests.post(url=main.URL_SEND_WECHAT_INFO, headers=headers, data=json.dumps(data))
  119. print(response)
  120. return ''
  121. #
  122. if __name__ == "__main__":
  123. print(time.localtime().tm_hour)
  124. # send_wechat_info("测试消息")