| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157 |
- from selenium import webdriver
- from selenium.webdriver.support.wait import WebDriverWait
- from selenium.webdriver.common.by import By
- from time import sleep
- import time
- import json
- import auth
- import requests
- import main
- # webdriver 下载地址:http://chromedriver.storage.googleapis.com/index.html
- # 放置于:把文件存放在python根目录下,例如:C:\xxx\Python\Python38下
- def get_detail(url_login, url_detail):
- options = webdriver.ChromeOptions()
- options.add_experimental_option('excludeSwitches', ['enable-automation'])
- # options.add_argument(r'--headless')
- # # options.add_argument(r'user-data-dir=C:\Users\Administrator\AppData\Local\Google\Chrome')
- # # options.add_argument('--disable-gpu')
- browser = webdriver.Chrome(options=options)
- try:
- wait = WebDriverWait(browser, 15)
- browser.maximize_window()
- browser.implicitly_wait(3) # 设置等待3秒后打开目标网页
- browser.implicitly_wait(3)
- # 登录页面
- browser.get(url=url_login)
- auth.add_cookie(browser)
- # 进入数据详情页
- browser.get(url_detail)
- sleep(10)
- if not auth.check_login(browser):
- print('登录失败')
- send_wechat_info("抖音线索登录失败")
- return
- # 进入数据详情页
- # browser.get(url_detail)
- sleep(5)
- while True:
- if time.localtime().tm_hour == 0: # 这个时间点停止
- break
- # 切换线索推荐tab 为了刷新
- click_sales_clue_push(browser)
- sleep(5 * 60) # 停止5分钟
- # click_sales_clue_list(browser)
- browser.get(url_detail)
- # 抓取数据
- # get_table(browser)
- click_page(browser)
- # 退出前更新一次cookie
- auth.record_cookie(browser)
- sleep(60 * 60*2) # 停止5分钟
- browser.quit()
- except Exception as e:
- print('err_detail')
- print(e)
- browser.quit()
- return
- # 1:姓名,2:电话,3:线索创建时间,4:互动类型,5:线索类型,6:最新互动记录,7:线索渠道,8:来源抖音号,9:分配状态
- # 10:自动定位城市,11:手动填写地域,12:通话状态,13:最近互动时间,14:来源抖音号类型
- key_dic = {1: "name", 2: "phone", 3: "create_time", 4: "status_interact", 5: "status_clue",
- 6: "new_interact", 7: "clue_channel", 8: "from_douyin", 9: "status_distribution",
- 10: "city", 11: "city_hand", 12: "status_call", 13: "last_time", 14: "from"}
- # 点击线索推送
- def click_sales_clue_push(browser):
- print("点击线索推荐")
- try:
- browser.find_element(By.ID, "PSalesCluePush").click()
- except:
- print("没有找到线索管理tab")
- sleep(5)
- # 点击线索管理
- def click_sales_clue_list(browser):
- browser.find_element(By.ID, "PSalesClueList").click()
- print("点击线索管理")
- sleep(5)
- # 判断是否需要分页
- def click_page(browser):
- page_items = browser.find_elements(By.CLASS_NAME, "leads-pager-item")
- num = len(page_items)
- if num <= 3:
- print("只有1页")
- get_table(browser)
- return
- for page in range(1, num - 3):
- page_items[num - 1].click()
- sleep(10)
- get_table(browser)
- # 读取数据
- def get_table(browser):
- # tr html的结构如下示例:
- # <tr>
- # <td>name</td> <td>phone</td>...
- # </tr>'
- tr_list = browser.find_elements(By.CLASS_NAME, "listTableRow")
- for tr in tr_list:
- tds = tr.find_elements(By.TAG_NAME, "td")
- data = {}
- for i in range(1, len(key_dic)):
- data[key_dic[i]] = tds[i].text
- # 给服务器传数据
- send_data(data)
- # 发送数据
- def send_data(data):
- print(data)
- headers = {'Content-Type': 'application/json'}
- response = requests.post(url=main.URL_SEND_DATA, headers=headers, data=json.dumps(data))
- print(response)
- return ''
- # 发送企业微信消息
- def send_wechat_info(message):
- print(message)
- data = {
- "msgtype": "text",
- "text": {
- "content": message
- }
- }
- headers = {'Content-Type': 'application/json'}
- response = requests.post(url=main.URL_SEND_WECHAT_INFO, headers=headers, data=json.dumps(data))
- print(response)
- return ''
- #
- if __name__ == "__main__":
- print(time.localtime().tm_hour)
- # send_wechat_info("测试消息")
|