瀏覽代碼

千里顺风提交

axiaofan 2 年之前
父節點
當前提交
38a2c0ff00
共有 5 個文件被更改,包括 180 次插入106 次删除
  1. 1 1
      data.json
  2. 144 91
      detail.py
  3. 11 0
      main-.py
  4. 24 7
      main.py
  5. 0 7
      setup.py

文件差異過大導致無法顯示
+ 1 - 1
data.json


+ 144 - 91
detail.py

@@ -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__":

+ 11 - 0
main-.py

@@ -0,0 +1,11 @@
+import detail
+
+global STATUS
+global URL_SEND_DATA
+URL_SEND_DATA = "http://10.8.230.200:8099/v1/bpm/save_clue"
+
+if __name__ == "__main__":
+    url_detail = 'http://qlsfc.kfzs.com/'
+    url_login = 'http://qlsfc.kfzs.com/'
+    detail.get_detail(url_login, url_detail)
+

+ 24 - 7
main.py

@@ -1,11 +1,28 @@
+from time import sleep
+from selenium import webdriver
+from selenium.webdriver.chrome.service import Service as ChromeService
+
 import detail
 
-global STATUS
-global URL_SEND_DATA
-URL_SEND_DATA = "http://10.8.230.200:8099/v1/bpm/save_clue"
-URL_SEND_WECHAT_INFO= "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=02b34c67-6a00-4cf9-885a-6857ba056aed"
+options = webdriver.ChromeOptions()
+options.add_experimental_option("excludeSwitches", ["enable-automation"])
+options.add_experimental_option("useAutomationExtension", False)
+service = ChromeService(executable_path="C:/Users/EDY/AppData/Local/google/Chrome/Application/chromedriver.exe")
 
 if __name__ == "__main__":
-    url_detail = 'https://leads.cluerich.com/pc/sales/clue/list'
-    url_login = 'https://leads.cluerich.com/pc/auth/login'
-    detail.get_detail(url_login, url_detail)
+    driver = webdriver.Chrome(service=service, options=options)
+    driver.maximize_window()
+    driver.implicitly_wait(3)  # 设置等待3秒后打开目标网页
+
+    url_login = 'http://qlsfc.kfzs.com/'
+    driver.get(url_login)
+
+    sleep(2)
+    detail.login(driver)
+
+    sleep(2)
+    detail.find_highlight(driver)
+
+    sleep(10)
+    driver.quit()
+

+ 0 - 7
setup.py

@@ -1,11 +1,4 @@
 from distutils.core import setup
-import py2exe
-from selenium import webdriver
-from selenium.webdriver.support.wait import WebDriverWait
-from selenium.webdriver.support import expected_conditions as EC
-from selenium.webdriver.common.by import By
-import mysql.connector
-import pandas as pd
 
 setup(console=['main.py'])