import os import time import tkinter as tk from tkinter import simpledialog, messagebox from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.edge.service import Service from selenium.webdriver.edge.options import Options from datetime import datetime # 1. 检查桌面小说文件夹 desktop_path = os.path.join(os.path.expanduser("~"), "Desktop") novel_folder = os.path.join(desktop_path, "小说") if not os.path.exists(novel_folder): os.makedirs(novel_folder) # 2. 弹出对话框获取网址和次数 root = tk.Tk() root.withdraw() url = simpledialog.askstring("输入", "请输入小说网页地址:") try: times = int(simpledialog.askstring("输入", "请输入需要获取的次数(页数或章节数):")) except Exception: messagebox.showerror("错误", "次数必须为数字!") exit() if not url or times <= 0: messagebox.showerror("错误", "输入无效") exit() # 3. 设置Edge浏览器 options = Options() options.use_chromium = True options.add_argument("--start-maximized") service = Service(executable_path="C:\\Users\\dxkcw\\Desktop\\小说\\msedgedriver.exe") # 或 EdgeDriver 的完整路径 driver = webdriver.Edge(service=service, options=options) # 4. 开始采集 driver.get(url) all_text = "" for i in range(times): time.sleep(2) # 等待页面加载 # 获取当前页面所有正文文本 try: body_text = driver.find_element(By.TAG_NAME, "body").text all_text += f"\n\n--- 第{i+1}部分 ---\n\n{body_text}" except Exception as e: print(f"第{i+1}次获取失败:{e}") break # 查找“下一页”或“下一章”的按钮 next_found = False for keyword in ["下一页", "下一章", "下一节", "下一部分"]: try: next_button = driver.find_element(By.PARTIAL_LINK_TEXT, keyword) next_button.click() next_found = True break except: continue if not next_found: print("未找到“下一页”按钮,提前结束") break # 5. 保存文件 timestamp = datetime.now().strftime("%Y%m%d%H%M%S") file_path = os.path.join(novel_folder, f"{timestamp}.txt") with open(file_path, "w", encoding="utf-8") as f: f.write(all_text) messagebox.showinfo("完成", f"小说已保存到:\n{file_path}") driver.quit()