import sys, json, time from pathlib import Path # from PyQt5.QtWidgets import ( from PyQt6.QtWidgets import ( QApplication, QWidget, QVBoxLayout, QHBoxLayout, QTextEdit, QPushButton, QLabel, QMessageBox ) from PyQt6.QtCore import Qt, QThread, pyqtSignal # from PyQt5.QtCore import Qt, QThread, pyqtSignal # 引入你现有的函数 from req import build_driver, scrape_item, save_to_excel, EXCEL_PATH class Worker(QThread): log = pyqtSignal(str) done = pyqtSignal() def __init__(self, urls): super().__init__() self.urls = urls def run(self): driver = build_driver() results = [] try: for url in self.urls: if not url.strip(): continue self.log.emit(f"开始抓取: {url}") info = scrape_item(driver, url.strip()) results.append(info) self.log.emit(json.dumps(info, ensure_ascii=False)) time.sleep(1.0) if results: save_to_excel(EXCEL_PATH, results) self.log.emit(f"写入完成:{EXCEL_PATH}") except Exception as e: self.log.emit(f"出错: {e}") finally: driver.quit() self.done.emit() class App(QWidget): def __init__(self): super().__init__() self.setWindowTitle("1688抓取") self.resize(800, 600) self.input = QTextEdit() self.input.setPlaceholderText("每行一个商品链接") self.log = QTextEdit() self.log.setReadOnly(True) self.btn = QPushButton("开始抓取") self.btn.clicked.connect(self.start) layout = QVBoxLayout() layout.addWidget(QLabel("商品链接:")) layout.addWidget(self.input, 3) layout.addWidget(self.btn) layout.addWidget(QLabel("日志:")) layout.addWidget(self.log, 4) self.setLayout(layout) self.worker = None def start(self): urls = [u for u in self.input.toPlainText().splitlines() if u.strip()] if not urls: QMessageBox.warning(self, "提示", "请先输入链接") return self.btn.setEnabled(False) self.worker = Worker(urls) self.worker.log.connect(self.append_log) self.worker.done.connect(self.finish) self.worker.start() def append_log(self, text): self.log.append(text) def finish(self): self.btn.setEnabled(True) self.log.append("任务完成") if __name__ == "__main__": app = QApplication(sys.argv) w = App() w.show() sys.exit(app.exec()) # sys.exit(app.exec_())