From aef8e6080e06eb04bdd7129a2c3779f0178283ff Mon Sep 17 00:00:00 2001 From: quantulr <35954003+quantulr@users.noreply.github.com> Date: Mon, 15 Jan 2024 17:19:41 +0800 Subject: [PATCH] fix --- get_qrcode/main.py | 69 +++++++++++++++++++++++++++------------------- pyproject.toml | 4 +-- 2 files changed, 43 insertions(+), 30 deletions(-) diff --git a/get_qrcode/main.py b/get_qrcode/main.py index d115694..f308d7c 100644 --- a/get_qrcode/main.py +++ b/get_qrcode/main.py @@ -1,38 +1,68 @@ import base64 import json +import logging import time import redis from selenium import webdriver -from selenium.common import NoSuchElementException, NoSuchWindowException +from selenium.common import NoSuchElementException, NoSuchWindowException, UnexpectedAlertPresentException from selenium.webdriver.common.by import By - # from selenium.webdriver.support import expected_conditions # from selenium.webdriver.support.wait import WebDriverWait +CRAWL_INTERVAL = 0.5 def get_qrcode(): - driver = webdriver.Chrome() + service = webdriver.ChromeService(executable_path="C:/Users/Administrator/Documents/chromedriver_win32/chromedriver.exe") + driver = webdriver.Chrome(service=service) redis_client = redis.StrictRedis(host="localhost", port=6379, db=0) - driver.get("http://localhost:3030") + driver.get("https://icme.haoyisheng.com") json_str_temp = "" while True: try: - qrcode_canvas = driver.find_element(By.CLASS_NAME, "qrcode") - qrcode_base64 = driver.execute_script("return arguments[0].toDataURL('image/png').substring(22);", - qrcode_canvas) - # qrcode_png = base64.b64decode(qrcode_base64) - json_str = json.dumps({"qrcode": qrcode_base64}) + qrcode_tab = driver.find_element(By.CSS_SELECTOR, ".x-tab-strip-active .x-tab-strip-text") + if qrcode_tab.get_attribute("innerHTML") != "课题二维码": + json_str = json.dumps({"qrcode": None}) + if json_str != json_str_temp: + json_str_temp = json_str + redis_client.publish("qrcode", json_str) + print("未打开二维码页面") + time.sleep(CRAWL_INTERVAL) + continue + + # 查找二维码所在iframe + qrcode_frame = driver.find_element(By.CSS_SELECTOR, "#menuItemSubjectQrCode iframe") + # 切换到iframe + driver.switch_to.frame(qrcode_frame) + # 获取二维码src + qrcode_img = driver.find_element(By.CSS_SELECTOR, "#imgDiv #img") + qrcode_src = qrcode_img.get_attribute("src") + # 课题名称,起止时间 + topic_title = driver.find_element(By.CSS_SELECTOR, "#title h1:first-child").text + start_time = driver.find_element(By.CSS_SELECTOR, "#title #p1").text + end_time = driver.find_element(By.CSS_SELECTOR, "#title #p2").text + + json_str = json.dumps( + {"qrcode": qrcode_src, "title": topic_title, "start_time": start_time, "end_time": end_time}) if json_str != json_str_temp: json_str_temp = json_str redis_client.publish("qrcode", json_str) - print("二维码已更新") + print("二维码已更新", topic_title, start_time, end_time) + driver.switch_to.default_content() + except NoSuchElementException: json_str = json.dumps({"qrcode": None}) if json_str != json_str_temp: json_str_temp = json_str redis_client.publish("qrcode", json_str) + driver.switch_to.default_content() print("二维码不存在") + + except UnexpectedAlertPresentException: + print("UnexpectedAlertPresentException") + time.sleep(CRAWL_INTERVAL) + continue + except NoSuchWindowException: print("窗口已关闭") json_str = json.dumps({"qrcode": None}) @@ -40,29 +70,12 @@ def get_qrcode(): json_str_temp = json_str redis_client.publish("qrcode", json_str) break - time.sleep(0.5) + time.sleep(CRAWL_INTERVAL) driver.quit() def main(): get_qrcode() - # driver = webdriver.Chrome() - # driver.get("http://localhost:3030") - # # qrcode_login = driver.find_element(By.ID, "lbApp") - # # qrcode_login.click() - # # qrcode_canvas = None - # - # qrcode_canvas = WebDriverWait(driver, 1000 * 60 * 60 * 24).until( - # expected_conditions.presence_of_element_located((By.CSS_SELECTOR, ".qrcode")) - # ) - # qrcode_base64 = driver.execute_script("return arguments[0].toDataURL('image/png').substring(22);", qrcode_canvas) - # - # qrcode_png = base64.b64decode(qrcode_base64) - # - # with open("qrcode.png", "wb") as qrcode_png_file: - # qrcode_png_file.write(qrcode_png) - # # time.sleep(8) - # driver.quit() if __name__ == "__main__": diff --git a/pyproject.toml b/pyproject.toml index f2b840e..bacff72 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "get-qrcode" -version = "0.1.0" +version = "0.9.0" description = "" authors = ["quantulr <35954003+quantulr@users.noreply.github.com>"] readme = "README.md" @@ -17,4 +17,4 @@ requires = ["poetry-core"] build-backend = "poetry.core.masonry.api" [tool.poetry.scripts] -dev = "get_qrcode.main:main" +get-qrcode = "get_qrcode.main:main"