You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 15:39:25