Python while True循环报导入未使用、代码不可达问题求解
问题原因
- 你编写的
while True循环没有设置任何退出分支,属于无限死循环,程序进入该循环后会永久停留在循环内执行page.screenshot()语句,永远不会走到循环外的后续代码。 - IDE静态检测时识别到循环后的代码永远没有执行机会,直接标记为不可达代码;而
os/cv2/pytesseract三个库的调用逻辑全部位于不可达代码段,IDE判定这三个导入的库自始至终不会被使用,因此抛出未使用导入的提示。 - 原代码还存在三处逻辑缺陷:
- 截图存储目录未提前创建,首次运行会触发路径不存在的IO错误
- 时间、文件名变量仅在程序启动时计算一次,循环运行过程中不会更新,会反复覆盖同一张截图
- 无限循环内未加延时,会以极高频率读写磁盘,短时间内占满系统IO资源
修复方案
- 把所有需要重复执行的逻辑(时间计算、路径校验、截图、OCR识别、文件清理)全部移入
while True循环内部,不要放在循环外。 - 调整代码执行顺序:程序启动时先完成全局配置(tesseract路径、根目录创建、浏览器初始化和页面操作),再进入无限循环;循环内按「更新时间→校验当日目录→截图→OCR识别→判断结果→清理无效文件」的顺序执行,每次循环加1-2秒延时避免资源占用过高。
- 可根据业务需求增加循环退出条件(比如检测到目标关键词就终止运行),如果需要永久持续运行,保留无限循环即可,此时所有导入库的调用都在可达代码范围内,IDE的报错提示会自动消失。
- 确保所有用到浏览器page实例的逻辑都在
sync_playwright()上下文管理器的缩进范围内,避免浏览器提前关闭导致调用报错。
修复后参考代码
import datetime import os import time import cv2 import pytesseract from playwright.sync_api import sync_playwright # 全局配置 caminho = r"C:\Program Files\Tesseract-OCR\tesseract.exe" pytesseract.pytesseract.tesseract_cmd = caminho chave = "****" root_pasta = "C:/Kprints" # 提前创建根存储目录 if not os.path.isdir(root_pasta): os.mkdir(root_pasta) with sync_playwright() as p: # 调试阶段headless设为False可看到浏览器操作,正式运行改True browser = p.chromium.launch(headless=False) page = browser.new_page() page.goto("*****") page.locator('xpath=/html/body/div/div[5]/div[2]/div[2]/div/div/div/div/div/div[19]/button[1]').click() time.sleep(3) page.locator('xpath=/html/body/div/div[5]/div[2]/div[2]/div/div/div/div/div/div[4]/input').click() page.fill('xpath=/html/body/div/div[5]/div[2]/div[2]/div/div/div/div/div/div[4]/input', "****") page.locator('xpath=/html/body/div/div[5]/div[2]/div[2]/div/div/div/div/div/div[6]/input').click() page.fill('xpath=/html/body/div/div[5]/div[2]/div[2]/div/div/div/div/div/div[6]/input', "****") page.locator('xpath=/html/body/div/div[5]/div[2]/div[2]/div/div/div/div/div/button').click() page.locator('xpath=/html/body/div/div[5]/div[2]/div[2]/div/div[1]/div/div/div[2]/div[1]/img[1]').click() page.locator('xpath=/html/body/div/div[5]/div[2]/div[2]/div/div[1]/div/div/div[2]/div[2]/div[2]/div/div[2]').click() page.locator('xpath=/html/body/div/div[5]/div[2]/div[2]/div/div/div/div/div/div[2]/div[5]/button').click() time.sleep(1) while True: # 每次循环重新计算当前时间,生成对应路径和文件名 data = datetime.datetime.now() h = data.strftime("%h") d = data.strftime("%d") H = data.strftime("%H") M = data.strftime("%M") S = data.strftime("%S") hd = h + d t = H + M + S # 拼接秒数避免同一分钟内文件名重复覆盖 pasta =f"C:/Kprints/{hd}" # 校验并创建当日存储目录 if not os.path.isdir(pasta): os.mkdir(pasta) # 页面截图 img_path = f"{pasta}/{t}.png" page.screenshot(path=img_path) time.sleep(1) # OCR识别截图内容 img = cv2.imread(img_path) texto = pytesseract.image_to_string(img) # 命中目标关键词则保留截图退出循环,否则删除无效截图 if chave in texto: print(f"检测到目标关键词,有效截图已保存至{img_path}") break os.remove(img_path) time.sleep(1) browser.close()
如果需要程序持续运行不退出,仅保持截图识别逻辑,直接删除代码中的
break语句即可。
内容的提问来源于stack exchange,提问作者user19438817
相关产品推荐
相关产品推荐

