|
|
@@ -1,11 +1,16 @@
|
|
|
+import json
|
|
|
+import time
|
|
|
+from datetime import date
|
|
|
+from time import sleep
|
|
|
+
|
|
|
+import requests
|
|
|
from selenium import webdriver
|
|
|
-from selenium.webdriver.support.wait import WebDriverWait
|
|
|
+from selenium.common import NoSuchElementException
|
|
|
+from selenium.webdriver import ActionChains, Keys
|
|
|
from selenium.webdriver.common.by import By
|
|
|
-from time import sleep
|
|
|
-import time
|
|
|
-import json
|
|
|
+from selenium.webdriver.support.wait import WebDriverWait
|
|
|
+
|
|
|
import auth
|
|
|
-import requests
|
|
|
import main
|
|
|
|
|
|
|
|
|
@@ -13,8 +18,8 @@ import main
|
|
|
# 放置于:把文件存放在python根目录下,例如:C:\xxx\Python\Python38下
|
|
|
|
|
|
def get_detail(url_login, url_detail):
|
|
|
- options = webdriver.ChromeOptions()
|
|
|
- options.add_experimental_option('excludeSwitches', ['enable-automation'])
|
|
|
+ options = webdriver.ChromeOptions
|
|
|
+ # options.add_experimental_option('excludeSwitches', ['enable-automation'],True)
|
|
|
# options.add_argument(r'--headless')
|
|
|
# # options.add_argument(r'user-data-dir=C:\Users\Administrator\AppData\Local\Google\Chrome')
|
|
|
# # options.add_argument('--disable-gpu')
|
|
|
@@ -29,36 +34,13 @@ def get_detail(url_login, url_detail):
|
|
|
|
|
|
# 登录页面
|
|
|
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
|
|
|
+ # auth.add_cookie(browser)
|
|
|
|
|
|
# 进入数据详情页
|
|
|
# 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分钟
|
|
|
+ sleep(10)
|
|
|
+ login(browser)
|
|
|
+ auth.record_cookie(browser)
|
|
|
|
|
|
browser.quit()
|
|
|
except Exception as e:
|
|
|
@@ -68,65 +50,135 @@ def get_detail(url_login, url_detail):
|
|
|
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 login(browser):
|
|
|
+ user_name = browser.find_element(By.XPATH, "//*[@id='app']/section/div/div[2]/div[1]/input")
|
|
|
+ user_name.clear()
|
|
|
+ user_name.send_keys("kfzs003")
|
|
|
+
|
|
|
+ browser.find_element(By.XPATH, "//*[@id='app']/section/div/div[2]/div[2]/input").send_keys("123456")
|
|
|
+ browser.find_element(By.XPATH, "//*[@id='app']/section/div/div[3]").click()
|
|
|
+
|
|
|
+
|
|
|
+def get_api_data():
|
|
|
+ response_yd = requests.get(
|
|
|
+ "http://10.8.230.200:8888/portal/r/jd?cmd=com.awspaas.user.apps.information_publish.wechat_count")
|
|
|
+ yd_number = response_yd.text
|
|
|
+ print("应到:" + yd_number)
|
|
|
+
|
|
|
+ response_sd = requests.get(
|
|
|
+ "http://xjf.lianyou.fun:8093/v1/account/qlsf_sign_in")
|
|
|
+
|
|
|
+ sd_number = response_sd.text
|
|
|
+ print("实到:" + sd_number)
|
|
|
+
|
|
|
+ tj_list = [yd_number, sd_number]
|
|
|
+ return tj_list
|
|
|
+
|
|
|
+
|
|
|
+def find_highlight(browser):
|
|
|
+ # 查找class为"custom-item"的节点,并且确保其子结构中没有class为"off-line-mask"的节点
|
|
|
+ items = browser.find_elements(By.CSS_SELECTOR, ".custom-item:not(:has(.off-line-mask))")
|
|
|
+
|
|
|
+ # 打印符合条件的节点数量
|
|
|
+ print("符合条件的节点数量:", len(items))
|
|
|
+
|
|
|
+ # 遍历符合条件的节点并打印相关信息
|
|
|
+ i = 1
|
|
|
+ n = 1
|
|
|
+
|
|
|
+ for item in items:
|
|
|
+ if item.find_element(By.CSS_SELECTOR, ".name-block p").text == "酸甜小柠檬":
|
|
|
+ today = date.today()
|
|
|
+ # 将日期格式化为字符串
|
|
|
+ formatted_date = today.strftime("%Y-%m-%d")
|
|
|
+ item.click()
|
|
|
+ sleep(1)
|
|
|
+ browser.find_element(By.XPATH,
|
|
|
+ "//*[@id='app']/section/section[2]/div[2]/section/section[2]/div[3]/div/img").click()
|
|
|
+ sleep(1)
|
|
|
+ browser.find_element(By.XPATH,
|
|
|
+ "//*[@id='app']/section/section[2]/div[2]/section/section[1]/div/input").send_keys(
|
|
|
+ "机器人签到")
|
|
|
+ sleep(1)
|
|
|
+ ActionChains(browser).key_down(Keys.ENTER).key_up(Keys.ENTER).perform()
|
|
|
+ sleep(1)
|
|
|
+ send_message(browser, formatted_date + "签到")
|
|
|
+ i += 1
|
|
|
+
|
|
|
+ for item in items:
|
|
|
+ print("节点信息:")
|
|
|
+ print("图片URL:", item.find_element(By.CSS_SELECTOR, ".el-badge img").get_attribute("src"))
|
|
|
+ print("名称:", item.find_element(By.CSS_SELECTOR, ".name-block p").text)
|
|
|
+ print("ID:", item.find_element(By.CSS_SELECTOR, ".name-block p:nth-child(2)").text)
|
|
|
+ print("-------------------------")
|
|
|
+ item.click()
|
|
|
+ sleep(1)
|
|
|
+ browser.find_element(By.XPATH,
|
|
|
+ "//*[@id='app']/section/section[2]/div[2]/section/section[2]/div[3]/div/img").click()
|
|
|
+ sleep(1)
|
|
|
+ if i == 1:
|
|
|
+ browser.find_element(By.XPATH,
|
|
|
+ "//*[@id='app']/section/section[2]/div[2]/section/section[1]/div/input").send_keys(
|
|
|
+ "机器人签到")
|
|
|
+ else:
|
|
|
+ browser.find_element(By.XPATH,
|
|
|
+ "//*[@id='app']/section/section[2]/div[2]/section/section[1]/div/input").click()
|
|
|
+
|
|
|
+ sleep(1)
|
|
|
+ ActionChains(browser).key_down(Keys.ENTER).key_up(Keys.ENTER).perform()
|
|
|
+ sleep(1)
|
|
|
+ n = send_message(browser, n)
|
|
|
+ i += 1
|
|
|
+ n += 1
|
|
|
+
|
|
|
+ print("n: " + str(n))
|
|
|
+ tj_list = get_api_data()
|
|
|
+ yd_number = tj_list[0]
|
|
|
+ sd_number = tj_list[1]
|
|
|
+ result = "bpm登记微信" + yd_number + "个,签到" + sd_number + "个。"
|
|
|
+ if (n - 1) == int(sd_number):
|
|
|
+ result += "正常。"
|
|
|
+ else:
|
|
|
+ result += "异常。"
|
|
|
+ print(result)
|
|
|
+
|
|
|
+ for item in items:
|
|
|
+ if item.find_element(By.CSS_SELECTOR, ".name-block p").text == "酸甜小柠檬":
|
|
|
+ item.click()
|
|
|
+ sleep(1)
|
|
|
+ browser.find_element(By.XPATH,
|
|
|
+ "//*[@id='app']/section/section[2]/div[2]/section/section[2]/div[3]/div/img").click()
|
|
|
+ sleep(1)
|
|
|
+ browser.find_element(By.XPATH,
|
|
|
+ "//*[@id='app']/section/section[2]/div[2]/section/section[1]/div/input").click()
|
|
|
+ sleep(1)
|
|
|
+ ActionChains(browser).key_down(Keys.ENTER).key_up(Keys.ENTER).perform()
|
|
|
+ sleep(1)
|
|
|
+ send_message(browser, result)
|
|
|
+ #
|
|
|
+
|
|
|
+
|
|
|
+def send_message(browser, n):
|
|
|
+ try:
|
|
|
+ browser.find_element(By.XPATH,
|
|
|
+ "//*[@id='app']/section/section[2]/div[2]/section/div[3]/div[1]/div/div/div[2]/div[1]/div").click()
|
|
|
+ sleep(1)
|
|
|
+ browser.find_element(By.XPATH,
|
|
|
+ "//*[@id='input-text']").send_keys(
|
|
|
+ n
|
|
|
+ )
|
|
|
+
|
|
|
+ sleep(1)
|
|
|
+ ActionChains(browser).key_down(Keys.ENTER).key_up(Keys.ENTER).perform()
|
|
|
+ sleep(1)
|
|
|
+ return n
|
|
|
+ except NoSuchElementException:
|
|
|
+ if isinstance(n, str):
|
|
|
+ return n
|
|
|
+ else:
|
|
|
+ return n - 1
|
|
|
|
|
|
|
|
|
-# 发送数据
|
|
|
def send_data(data):
|
|
|
print(data)
|
|
|
headers = {'Content-Type': 'application/json'}
|
|
|
@@ -149,6 +201,7 @@ def send_wechat_info(message):
|
|
|
print(response)
|
|
|
return ''
|
|
|
|
|
|
+
|
|
|
#
|
|
|
|
|
|
if __name__ == "__main__":
|