img标签的src=""会引起的Page_Load多次执行

通过实验发现,当HTML中的img标签src属性为空时,会导致浏览器尝试加载当前目录,默认文档可能会被加载两次。若src属性设置错误或移除,页面则正常加载。

今天看见园子里有人因img的src为空导致session丢失,详情见http://www.cnblogs.com/kyneblog/archive/2009/06/11/1500999.html

以前一直没注意这个,所以晚上特地写了一段代码验证:

Default.aspx后台代码:

using  System;
using  System.Web;
using  System.IO;

namespace  src
{
    
public   partial   class  _Default : System.Web.UI.Page
    {
        
protected   void  Page_Load( object  sender, EventArgs e)
        {
            WriteLog();
        }


        
public   static   void  WriteLog()
        {
            
string  _logFile  =  HttpContext.Current.Server.MapPath( " log/log.txt " );

            
using  (StreamWriter sw  =   new  StreamWriter(_logFile,  true ))
            {
                
string  s  =   string .Format( " {0} {1} " , HttpContext.Current.Request.Url.AbsoluteUri.ToString(), DateTime.Now.ToString());
                sw.WriteLine(s);
                sw.Close();
            }
        }
    }
}

代码很简单,页面每次打开,都会在log/log.txt中追加一行记录,内容为“当前页的绝对网址+当前时间”
前端测试代码:
<% @ Page Language = " C# "  AutoEventWireup = " true "  CodeBehind = " Default.aspx.cs "  Inherits = " src._Default "   %>
<! DOCTYPE html PUBLIC  " -//W3C//DTD XHTML 1.0 Transitional//EN "   " http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd " >

< html xmlns = " http://www.w3.org/1999/xhtml "   >
< head runat = " server " >
    
< title ></ title >
</ head >
< body >    
    
< img alt = " test "  src = ""   />    
</ body >
</ html >
F5运行,发现log.txt确实有二行记录(在IE,FF,Chrome下都是同样的结果)

如果把<img alt="test" src="" />   改成二个连续的img,即:
<img alt="test" src="" />  
<img alt="test" src="" />  
运行后,页面仍被执行2次

继续测试,把<img alt="test" src="" /> 改为  <img alt="sss" src="" onerror="this.src='http://www.baidu.com/img/baidu_logo.gif'"/>,即图片加载错误时自动加载百度的logo,保证最终src肯定有值
猜一下运行结果?
结果与不加onerror完全相同,页面仍然执行二次!(有点意外吧?哈...)

go on! 这回干脆把src=""都去掉,即改成<img alt="test" />,再次竞猜结果?
居然正常了,即仅执行了一次!(呵呵,看来多一事不如少一事)

最后再折腾一次,把src故意写成一个错误的地址,比如<img alt="test" src=" http://abc.asdf.werdafsaf.sadfasdfas.xxx.gif" />
结果正常,仅执行了一次!
结论:img标签的src=""时,会引起浏览器再次访问"./"即当前目录,如果该目录下有default.aspx,index.aspx等IIS的默认文档,则默认文档会执行2次
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <title>唯美 </title> <meta name="keywords" content=" "> <meta name="description" content=" "> <meta name="author" content="www."> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <link rel="stylesheet" href="css/reset.css" type="text/css" media="all"> <link rel="shortcut icon" href="index/images/favicon.ico"> <link rel="stylesheet" href="css/jquery.fancybox-1.3.4.css" type="text/css" media="screen"> <link rel="stylesheet" href="css/style.css" type="text/css" media="all"> <link href="css/prettyPhoto.css" rel="stylesheet" /> <script type="text/javascript" src="js/jquery.min.js" ></script> <script type="text/javascript" src="js/content_switch.js"></script> <script type="text/javascript" src="js/jquery.easing.1.3.js"></script> <script type="text/javascript" src="js/jquery.mousewheel.js"></script> <script type="text/javascript" src="js/jquery-ui.js"></script> <script type="text/javascript" src="js/cScroll.js"></script> <script src="js/jquery.cycle.all.latest.js" type="text/javascript"></script> <script src="js/jquery.color.js" type="text/javascript"></script> <script type="text/javascript" src="js/script.js"></script> <script type="text/javascript" src="js/functions.js"></script> <script src="js/prettyPhoto.js"></script> <!--[if lt IE 9]> <script type="text/javascript" src="./js/html5.js"></script> <link rel="stylesheet" href="./css/ie.css" type="text/css" media="all"> <![endif]--> <!--[if lt IE 8]> <div style=' clear: both; text-align:center; position: relative;'> <a href="http://windows.microsoft.com/en-US/internet-explorer/products/ie/home?ocid=ie6_countdown_bannercode"><img src="http://storage.ie6countdown.com/assets/100/images/banners/warning_bar_0000_us.jpg" border="0" height="42" width="820" alt="You are using an outdated browser. For a faster, safer browsing experience, upgrade for free today." /></a> </div> <![endif]--> <body onpaste="return false" ondragstart="return false" onmouseover="window.status='';return true" oncopy="return false;"> <frameset> <frame src="index.html"> </frameset> <script> function stop(){ alert('宝贝,我爱你!'); return false; } document.oncontextmenu=stop; </script> <body onselectstart="return false" onpaste="return false" oncopy="return false;" oncut="return false;" > <script> function checkhtml5() { if ($.browser.msie && parseInt($.browser.version, 10) < 9) { document.body.innerHTML="<div style=' clear: both; text-align:center; position: relative; height: 50px; margin-top: 30px; padding: 20px; background-color: red; color: white; font-size:20px;'>你的浏览器非常落后,不支持 HTML5!<br/>请使用 Chrome 14+/IE 9+/Firefox 7+/Safari 4+ 其中任意一款浏览器访问此页面。</a></div>"; } } </script> <head> <style> a.wb_sina { float:left; margin-top:20px; margin-left:15px; display:inline-block; padding:4px 10px; border-radius:3px; background-color:#e55345; background-image:-moz-linear-gradient(top,#e96249,#e03c40); background-image:-ms-linear-gradient(top,#e96249,#e03c40); background-image:-webkit-gradient(linear,0 0,0 100%,from(#e96249),to(#e03c40)); background-image:-webkit-linear-gradient(top,#e96249,#e03c40); background-image:-o-linear-gradient(top,#e96249,#e03c40); background-image:linear-gradient(top,#e96249,#e03c40); filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#e96249',endColorstr='#e03c40',GradientType=0); background-repeat:repeat-x; text-shadow:0 -1px 0 rgba(0,0,0,.5); border:1px solid #cf2b28; color:#fff!important; box-shadow:0 1px 0 rgba(255,255,255,.2) inset,0 1px 0 rgba(0,0,0,.2); } a.wb_sina:hover { background-image:-moz-linear-gradient(top,#e03c40,#e96249); background-image:-ms-linear-gradient(top,#e03c40,#e96249); background-image:-webkit-gradient(linear,0 0,0 100%,from(#e03c40),to(#e96249)); background-image:-webkit-linear-gradient(top,#e03c40,#e96249); background-image:-o-linear-gradient(top,#e03c40,#e96249); background-image:linear-gradient(top,#e03c40,#e96249); filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#e03c40',endColorstr='#e96249',GradientType=0); } a.wb_sina span { display:inline-block; vertical-align:-5px; margin-right:7px; height:20px; width:24px; background:url(./images/weibo.png) no-repeat; } a.wb_tencent { float:left; margin-top:20px; margin-left:15px; display:inline-block; padding:4px 10px; border-radius:3px; background-color:#0e7fcc; background-image:-moz-linear-gradient(top,#1288d4,#0771c1); background-image:-ms-linear-gradient(top,#1288d4,#0771c1); background-image:-webkit-gradient(linear,0 0,0 100%,from(#1288d4),to(#0771c1)); background-image:-webkit-linear-gradient(top,#1288d4,#0771c1); background-image:-o-linear-gradient(top,#1288d4,#0771c1); background-image:linear-gradient(top,#1288d4,#0771c1); filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#1288d4',endColorstr='#0771c1',GradientType=0); background-repeat:repeat-x; text-shadow:0 -1px 0 rgba(0,0,0,.5); border:1px solid #0D6EB8; color:#fff!important; box-shadow:0 1px 0 rgba(255,255,255,.2) inset,0 1px 0 rgba(0,0,0,.2); } a.wb_tencent:hover { background-color:#0e7fcc; background-image:-moz-linear-gradient(top,#0771c1,#1288d4); background-image:-ms-linear-gradient(top,#0771c1,#1288d4); background-image:-webkit-gradient(linear,0 0,0 100%,from(#0771c1),to(#1288d4)); background-image:-webkit-linear-gradient(top,#0771c1,#1288d4); background-image:-o-linear-gradient(top,#0771c1,#1288d4); background-image:linear-gradient(top,#0771c1,#1288d4); filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#0771c1',endColorstr='#1288d4',GradientType=0); } a.wb_tencent span { display:inline-block; vertical-align:-5px; margin-right:7px; height:20px; width:24px; background:url(./images/weibo.png) no-repeat 0 -20px; } #abox { position: fixed; _position: absolute; right: 15px; z-index: 99999999; } </style> </head> <body> <body onLoad="checkhtml5()"> <div id="abox"> </div> <div class="page_spinner"> <div></div> </div> <div class="over"> <div class="centre"> <div class="main"> <!--header --> <header> <h1><span id="logo"><img src="images/logo1.png" alt="" usemap="#logo"></span></h1> <nav class="menu"> <ul id="menu"> <li id="nav1"><img src="images/nav1.png" alt=""><span>爱的宣誓</span></li> <li id="nav2"><img src="images/nav2.png" alt=""><span>恋爱历程</span> </li> <li id="nav3"><img src="images/nav3.png" alt=""><span>絮叨絮叨</span></li> <li id="nav4"><img src="images/nav4.png" alt=""><span>祝福我们</span></li> <li id="nav5"><img src="images/nav5.png" alt=""><span>爱的映像</span></li> <li id="nav6"><img src="images/nav6.png" alt=""><span>时光沙漏</span></li> </ul> </nav> <img src="images/spacer.gif" alt="" id="navigation" usemap="#navigation"> <map name="navigation" class="navigation"> </map> <map name="logo" class="map_logo"></map> </header> <!--header end--> <!--content --> <map name="back" class="map_back"></map> <article id="content"> <ul> <li id="page_Home"> <img src="images/bg_content.png" alt="" class="bg_cont"> <span class="back"><img src="images/nav1.png" alt="" usemap="#back"><a href="index.html#close">返回</a></span> <div class="pad"> <h2>爱的宣誓</h2> 人物:浟佳 & 宝贝<br /> 不在乎曾经拥有,只在乎天长地久。<br /> 爱,就要说出来!<br /> 再美好的回忆,也只是回忆;<br /> 再美丽的诺言,不到实现的那一刻,也只是一句空话。<br/> -- </div> </li> <li id="page_About"> <img src="images/bg_content.png" alt="" class="bg_cont"> <span class="back"><img src="images/nav2.png" alt="" usemap="#back"><a href="index.html#close">返回</a></span> <div class="pad"> <h2>恋爱历程</h2> <div class="relative"> <div class="scroll"> <span>人物:浟佳 & 宝贝</span> <p>    宝贝你还记得么?</p> <p>    XX年X月X日。</p> <p>    我们在xx相遇。</p> <p>    然后.........</p> <p>    过程.........</p> <p>    我爱你,我会一直陪在你身边</p> <p>    不离不弃</p> <p>     - </p> </div> </div> </div> </li> <li id="page_Talk"> <img src="images/bg_content.png" alt="" class="bg_cont"> <span class="back"><img src="images/nav3.png" alt="" usemap="#back"><a href="index.html#close">返回</a></span> <div class="pad"> <h2>絮叨絮叨</h2> <div class="relative"> <div class="scroll"> <div style="width:100%;float: left; border-bottom: 1px solid #CCCCCC;">浟佳<br/><span style="float: right"> --by </span></div> <div style="width:100%;float: left">分享我所知道的<br/><span style="float: right"> --by </span></div> </div> </div> </div> </li> <li id="page_Message"> <img src="images/bg_content.png" alt="" class="bg_cont"> <span class="back"><img src="images/nav4.png" alt="" usemap="#back"><a href="index.html#close">返回</a></span> <div class="pad"> <h2>祝福我们</h2> <div class="relative"> <div class="scroll"> <div style="min-height: 300px; padding-bottom: 50px;"> <!-- 多说评论框 start --> <div class="ds-thread" data-thread-key="yyu" data-title="bb" data-url="http://"></div> <!-- 多说评论框 end --> <!-- 多说公共JS代码 start (一个网页只需插入一次) --> <script type="text/javascript"> var duoshuoQuery = {short_name:"love90"}; (function() { var ds = document.createElement('script'); ds.type = 'text/javascript';ds.async = true; ds.src = (document.location.protocol == 'https:' ? 'https:' : 'http:') + '/static.duoshuo.com/embed.js'; ds.charset = 'UTF-8'; (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(ds); })(); </script> <!-- 多说公共JS代码 end --> </div> </div> </div> </div> </li> <li id="page_Blog"> <img src="images/bg_content.png" alt="" class="bg_cont"> <span class="back"><img src="images/nav5.png" alt="" usemap="#back"><a href="index.html#close">返回</a></span> <div class="pad"> <h2>爱的映像</h2> <div class="relative"> <div class="scroll"> <ul class="gallery fancybox"> <li style="line-height:120px"><a href="images/uploadimage/imglsh001.jpg" rel="prettyPhoto[gallery1]"><img src="images/uploadimage/imglsh001small.jpg" alt=""></a></li> <li style="line-height:120px"><a href="images/uploadimage/imglsh002.jpg" rel="prettyPhoto[gallery1]"><img src="images/uploadimage/imglsh002small.jpg" alt=""></a></li> <li style="line-height:120px"><a href="images/uploadimage/img003.jpg" rel="prettyPhoto[gallery1]"><img src="images/uploadimage/img003small.jpg" alt=""></a></li> <li style="line-height:120px"><a href="images/uploadimage/imglsh001.jpg" rel="prettyPhoto[gallery1]"><img src="images/uploadimage/imglsh001small.jpg" alt=""></a></li> <li style="line-height:120px"><a href="images/uploadimage/imglsh002.jpg" rel="prettyPhoto[gallery1]"><img src="images/uploadimage/imglsh002small.jpg" alt=""></a></li> <li style="line-height:120px"><a href="images/uploadimage/img003.jpg" rel="prettyPhoto[gallery1]"><img src="images/uploadimage/img003small.jpg" alt=""></a></li> <li style="line-height:120px"><a href="images/uploadimage/img004.jpg" rel="prettyPhoto[gallery1]"><img src="images/uploadimage/img004small.jpg" alt=""></a></li> <li style="line-height:120px"><a href="images/uploadimage/imglsh002.jpg" rel="prettyPhoto[gallery1]"><img src="images/uploadimage/imglsh002small.jpg" alt=""></a></li> <li style="line-height:120px"><a href="images/uploadimage/img003.jpg" rel="prettyPhoto[gallery1]"><img src="images/uploadimage/img003small.jpg" alt=""></a></li> <li style="line-height:120px"><a href="images/uploadimage/img004.jpg" rel="prettyPhoto[gallery1]"><img src="images/uploadimage/img004small.jpg" alt=""></a></li> </ul> </div> </div> </div> </li> <li id="page_Time"> <img src="images/bg_content.png" alt="" class="bg_cont"> <span class="back"><img src="images/nav6.png" alt="" usemap="#back"><a href="index.html#close">返回</a></span> <div class="pad"> <h2>时光沙漏</h2> <div id="loveHeart" style="margin-top: 30px;font-size: 25px;"> <span style="">宝贝你知道我爱你爱了多久了吗?</span> <div id="elapseClock" style="margin: 10px 0px 10px 0px;"></div> <img src="images/1.gif" />    <img src="images/2.gif" /><br/><br/> <div id="loveu"> 爱:从2014-2-6开始!<br/> <div class="signature" style="float: right; margin-right: 50px;">by 浟佳 </div> </div> </div> </div> </li> </ul> </article> <!--content end--> </div> </div> <div class="bg1"> <div class="main"> <!--footer --> <footer style="line-height:20px"> <div id="copyright"> <script language="JavaScript"></script> </div> <!-- {%FOOTER_LINK} --> </footer> <!--footer end--> </div> </div> </div> <script> $(window).load(function() { $('.page_spinner').fadeOut(); $('body').css({overflow:'visible'}); }) </script> <script type="text/javascript">//修改时光沙漏时间 var offsetX = $("#loveHeart").width() / 2; var offsetY = $("#loveHeart").height() / 2 - 55; var together = new Date(); together.setFullYear(2014, 02, 06); together.setHours(17); together.setMinutes(0); together.setSeconds(0); together.setMilliseconds(0); setTimeout(function () { adjustWordsPosition(); startHeartAnimation(); }, 3000); timeElapse(together); setInterval(function () { timeElapse(together); }, 500); adjustCodePosition(); $("#code").typewriter(); </script> <audio id="bgmMusic" src="http://www.51mp3ring.com/51mp3ring_com2/at200611121582079026.mp3" preload="auto" type="audio/mp3" autoplay loop></audio> <!--coded by koma--> <!--LIVEDEMO_00 --> </body> </head> </html>补充并修改该代码
05-21
+--------------------------------------------------------------------------------------------------------+ | npu-smi 25.0.rc1.1 Version: 25.0.rc1.1 | +-------------------------------+-----------------+------------------------------------------------------+ | NPU Name | Health | Power(W) Temp(C) Hugepages-Usage(page) | | Chip Device | Bus-Id | AICore(%) Memory-Usage(MB) | +===============================+=================+======================================================+ | 2 310P3 | OK | NA 49 24 / 24 | | 0 0 | 0000:01:00.0 | 0 1706 / 44216 | +-------------------------------+-----------------+------------------------------------------------------+ | 2 310P3 | OK | NA 47 0 / 0 | | 1 1 | 0000:01:00.0 | 0 1367 / 43757 | +===============================+=================+======================================================+ | 3 310P3 | OK | NA 52 0 / 0 | | 0 2 | 0000:03:00.0 | 0 1484 / 44216 | +-------------------------------+-----------------+------------------------------------------------------+ | 3 310P3 | OK | NA 49 0 / 0 | | 1 3 | 0000:03:00.0 | 0 1456 / 43757 | +===============================+=================+======================================================+ | 5 310P3 | OK | NA 49 0 / 0 | | 0 4 | 0000:81:00.0 | 0 1599 / 44216 | +-------------------------------+-----------------+------------------------------------------------------+ | 5 310P3 | OK | NA 47 0 / 0 | | 1 5 | 0000:81:00.0 | 0 1341 / 43757 | +===============================+=================+======================================================+ | 6 310P3 | OK | NA 51 0 / 0 | | 0 6 | 0000:83:00.0 | 0 1505 / 44216 | +-------------------------------+-----------------+------------------------------------------------------+ | 6 310P3 | OK | NA 50 0 / 0 | | 1 7 | 0000:83:00.0 | 0 1433 / 43757 | +===============================+=================+======================================================+ +-------------------------------+-----------------+------------------------------------------------------+ | NPU Chip | Process id | Process name | Process memory(MB) | +===============================+=================+======================================================+ | 2 0 | 2450404 | python | 98 | | 2 0 | 2526327 | python | 99 | | 2 0 | 2522713 | python | 98 | +===============================+=================+======================================================+ | No running processes found in NPU 3 | +===============================+=================+======================================================+ | No running processes found in NPU 5 | +===============================+=================+======================================================+ | No running processes found in NPU 6 | +===============================+=================+======================================================+ 这是当前npu的使用状态,现在需要怎么办,代码中有错误吗,还是代码衔接问题 import os import io import cv2 import time import logging import numpy as np from PIL import Image from fastapi import FastAPI, File, UploadFile, Request from fastapi.responses import JSONResponse from fastapi.staticfiles import StaticFiles from pydantic import BaseModel from typing import Optional, List, Dict, Any from datetime import datetime # 华为昇腾推理API import acl # 配置日志 logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s') logger = logging.getLogger(__name__) app = FastAPI(title="Ascend-OM Object Detection API") RESULT_DIR = 'results' os.makedirs(RESULT_DIR, exist_ok=True) app.mount("/gqj_check/img", StaticFiles(directory=RESULT_DIR), name="results") CUSTOM_NAMES = { "A_安全帽": "安全帽", "B_安全带": "安全带", "C_绝缘靴": "绝缘靴", "D_绝缘手套": "绝缘手套", "E_验电器": "验电器", "F_工具包": "工具包", "G_钳子": "钳子", "H_力矩扳手": "力矩扳手", "I_钢丝刷": "钢丝刷", "J_头灯": "头灯", "K_力矩头": "力矩头", "L_防护旗": "防护旗", "M_扳手": "扳手", "N_螺丝刀": "螺丝刀", "O_脚扣": "脚扣", "P_水平尺": "水平尺", "Q_手锤子": "手锤子" } class ImageUrl(BaseModel): image_url: str class DetectionItem(BaseModel): class_name: str count: int confidence: float class ApiResponse(BaseModel): code: int msg: str request_time: str end_time: str total_time: str status: Optional[str] data: List[DetectionItem] inference_time: Optional[str] image_url: Optional[str] source_url: Optional[str] # --------- 昇腾 NPU 推理相关 --------- class AscendModel: def __init__(self, om_path): logger.info("初始化ACL环境...") self.acl_init() self.context, self.stream = None, None self.model_id, self.model_desc = None, None self.input_size = (960, 960) # 需与模型输入一致 self.input_data = None self.output_data = None logger.info("加载模型...") self.load_model(om_path) logger.info("模型加载完成") def acl_init(self): """初始化ACL环境""" ret = acl.init() if ret != 0: raise Exception(f"ACL初始化失败,错误码: {ret}") def load_model(self, om_path): """加载OM模型并准备输入输出缓冲区""" if not os.path.exists(om_path): raise FileNotFoundError(f"模型文件不存在: {om_path}") # 创建上下文和流 self.context = acl.rt.create_context(0) self.stream = acl.rt.create_stream() # 加载模型 self.model_id = acl.mdl.load_from_file(om_path) self.model_desc = acl.mdl.create_desc(self.model_id) # 准备输入输出缓冲区 self._prepare_buffers() def _prepare_buffers(self): """准备模型输入输出缓冲区""" # 获取输入描述 input_num = acl.mdl.get_num_inputs(self.model_desc) input_desc = acl.mdl.get_input_desc(self.model_desc, 0) input_size = acl.mdl.get_desc_size(input_desc) self.input_data = acl.rt.malloc(input_size, acl.rt.mem_type_device) # 获取输出描述 output_num = acl.mdl.get_num_outputs(self.model_desc) self.output_data = [] for i in range(output_num): output_desc = acl.mdl.get_output_desc(self.model_desc, i) output_size = acl.mdl.get_desc_size(output_desc) output_buf = acl.rt.malloc(output_size, acl.rt.mem_type_device) self.output_data.append(output_buf) def preprocess(self, image: Image.Image): """图像预处理""" img = image.resize(self.input_size) img = np.array(img) if img.shape[2] == 4: img = img[:, :, :3] # 去除alpha通道 img = cv2.cvtColor(img, cv2.COLOR_RGB2BGR) img = img.astype(np.float32) / 255.0 img = np.transpose(img, (2, 0, 1)) img = np.expand_dims(img, 0) return img def infer(self, img_np: np.ndarray): """执行模型推理""" logger.info("开始推理...") start_time = time.time() # 将数据拷贝到设备 img_flat = img_np.flatten() acl.rt.memcpy(self.input_data, img_flat.nbytes, acl.util.numpy_to_ptr(img_flat), img_flat.nbytes, acl.rt.memcpy_host_to_device) # 执行推理 inputs = [self.input_data] outputs = self.output_data ret = acl.mdl.execute(self.model_id, inputs, outputs) if ret != 0: raise Exception(f"推理执行失败,错误码: {ret}") # 处理输出(根据实际模型输出格式调整) # 这里假设输出是检测框数组 [class_id, conf, x1, y1, x2, y2] output_buffer = outputs[0] output_size = acl.mdl.get_desc_size(acl.mdl.get_output_desc(self.model_desc, 0)) host_output = np.zeros(output_size // 4, dtype=np.float32) # 假设是float32类型 acl.rt.memcpy(acl.util.numpy_to_ptr(host_output), output_size, output_buffer, output_size, acl.rt.memcpy_device_to_host) # 解析输出为检测框格式 dets = [] num_dets = int(host_output[0]) # 假设第一个元素是检测框数量 for i in range(num_dets): base_idx = 1 + i * 6 if base_idx + 5 >= len(host_output): break class_id = int(host_output[base_idx]) conf = host_output[base_idx + 1] x1, y1, x2, y2 = host_output[base_idx+2:base_idx+6] dets.append([class_id, conf, x1, y1, x2, y2]) inference_time = time.time() - start_time logger.info(f"推理完成,耗时: {inference_time:.3f}秒") return dets def __del__(self): """资源释放""" logger.info("释放资源...") if hasattr(self, 'model_id') and self.model_id: acl.mdl.unload(self.model_id) if hasattr(self, 'model_desc') and self.model_desc: acl.mdl.destroy_desc(self.model_desc) if hasattr(self, 'input_data') and self.input_data: acl.rt.free(self.input_data) if hasattr(self, 'output_data') and self.output_data: for buf in self.output_data: acl.rt.free(buf) if hasattr(self, 'stream') and self.stream: acl.rt.destroy_stream(self.stream) if hasattr(self, 'context') and self.context: acl.rt.destroy_context(self.context) acl.finalize() # --------- FastAPI 业务逻辑 --------- model = None # 延迟初始化,通过命令行参数加载 def process_image(image: Image.Image, request_time: datetime, original_filename: Optional[str] = None): """处理图像并返回检测结果""" timestamp = request_time.strftime("%Y%m%d_%H%M%S_%f") # 生成文件名 if original_filename: base_name = os.path.basename(original_filename) name, ext = os.path.splitext(base_name) original_filename = f"{name}_{timestamp}{ext}" else: original_filename = f"original_{timestamp}.jpg" original_path = os.path.join(RESULT_DIR, original_filename) result_filename = f"detection_{timestamp}.jpg" result_path = os.path.join(RESULT_DIR, result_filename) # 保存原图 image.save(original_path) logger.info(f"原图保存至: {original_path}") # 推理过程 logger.info("开始预处理和推理...") start_inference_time = time.time() img_np = model.preprocess(image) results = model.infer(img_np) end_inference_time = time.time() inference_time = end_inference_time - start_inference_time logger.info(f"推理耗时: {inference_time:.3f} 秒") # 解析推理结果 class_counts = {} detected_objects = [] opencv_image = cv2.cvtColor(np.array(image), cv2.COLOR_RGB2BGR) height, width = opencv_image.shape[:2] for det in results: class_id, conf, x1, y1, x2, y2 = det # 过滤低置信度结果 if conf < 0.5: continue # 检查类别ID有效性 if 0 <= class_id < len(CUSTOM_NAMES): class_name = list(CUSTOM_NAMES.values())[int(class_id)] else: class_name = f"未知类别({class_id})" logger.warning(f"检测到未知类别ID: {class_id}") # 更新计数 class_counts[class_name] = class_counts.get(class_name, 0) + 1 detected_objects.append({"class_name": class_name, "confidence": conf}) # 绘制检测框(确保坐标在有效范围内) x1 = max(0, min(int(x1), width)) y1 = max(0, min(int(y1), height)) x2 = max(0, min(int(x2), width)) y2 = max(0, min(int(y2), height)) cv2.rectangle(opencv_image, (x1, y1), (x2, y2), (0,255,0), 2) cv2.putText(opencv_image, f"{class_name}:{conf:.2f}", (x1, max(10, y1-10)), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0,255,0), 2) # 保存结果图 cv2.imwrite(result_path, opencv_image) logger.info(f"结果图保存至: {result_path}") # 构建返回结果 detection_result = [] for class_name, count in class_counts.items(): class_detections = [d for d in detected_objects if d["class_name"] == class_name] max_confidence = max([d["confidence"] for d in class_detections]) if class_detections else 0 detection_result.append({ "class_name": class_name, # 与DetectionItem保持一致 "count": count, "confidence": round(max_confidence, 4) }) return { "detection_result": detection_result, "inference_time": inference_time, "original_path": original_path, "result_path": result_path } @app.post("/gqj_check/localfile") async def detect_objects(request: Request, file: UploadFile = File(...)): request_time = datetime.now() if model is None: end_time = datetime.now() return JSONResponse( content={"code": 500, "msg": "模型未加载", "request_time": str(request_time), "end_time": str(end_time), "total_time": "0", "data": []}, status_code=500 ) try: contents = await file.read() image = Image.open(io.BytesIO(contents)) result = process_image(image, request_time, file.filename) end_time = datetime.now() base_url = str(request.base_url) result_filename = os.path.basename(result["result_path"]) debug_image_url = f"{base_url}gqj_check/img/{result_filename}" response_data = { "code": 200, "msg": "成功", "request_time": str(request_time), "end_time": str(end_time), "total_time": f"{(end_time-request_time).total_seconds():.3f}秒", "status": "success", "data": result["detection_result"], "inference_time": f"{result['inference_time']:.3f}", # 与模型保持一致 "debug_image_url": debug_image_url } logger.info("检测完成,返回结果") return JSONResponse(content=response_data) except Exception as e: end_time = datetime.now() logger.error(f"检测异常: {str(e)}", exc_info=True) return JSONResponse( content={"code": 500, "msg": str(e), "request_time": str(request_time), "end_time": str(end_time), "total_time": "0", "data": []}, status_code=500 ) if __name__ == "__main__": import argparse import uvicorn parser = argparse.ArgumentParser() parser.add_argument('--model_path', type=str, required=True, help='OM模型路径') parser.add_argument('--port', type=int, default=8000) parser.add_argument('--input_size', type=int, nargs=2, default=(960, 960), help='模型输入尺寸') args = parser.parse_args() logger.info(f"正在加载模型: {args.model_path},服务端口: {args.port}") model = AscendModel(args.model_path) model.input_size = tuple(args.input_size) # 设置输入尺寸 logger.info(f"模型加载完成,输入尺寸: {model.input_size},服务启动中...") uvicorn.run(app, host="0.0.0.0", port=args.port)
最新发布
07-31
{extend name="public/base" /} {block name="body"} <link href="/public/plugs/datepicker/css/foundation-datepicker.min.css" rel="stylesheet" type="text/css"> <script src="/public/plugs/datepicker/js/foundation-datepicker.js"></script> <script src="/public/plugs/datepicker/js/foundation-datepicker.zh-CN.js"></script> <script type="text/javascript" src="__PUBLIC__/js_manage/account_manage.js"></script> <link rel="stylesheet" href="/application/user/static/css/chat.css" type="text/css"/> <link href="/public/css/callrecord.css" rel="stylesheet" type="text/css"> <script type="text/javascript" src='/public/js/paging.js'></script> <script type="text/javascript" src='/public/js_validation/validation.js'></script> <link href="/public/css/intentionnal_member2.css" rel="stylesheet" type="text/css"/> <div class="row"> <div class="col-lg-12"> <div class=" clearfix fadeInRight animated"> <div class=" main-box"> <header class="main-box-header clearfix callrecord-title"> <div class="pull-left"> <span class="n_panel_title"><img src="__PUBLIC__/img/e_yixiang.png" alt="">客户管理</span> </div> </header> <div class="l_loadfixed" style="display: none;"> <div class="l_loaddata"> <p><img src="/public/img_sj/reload.gif" alt="">正在查询中...</p> <p>由于您的数据过大,加载需要一些时间,我们在努力的加载中...</p> </div> </div> </div> <div class="container-fluid callrecord-bg"> <div class="condition pz_manping_height "> <div class="condition-title"> <img src="__PUBLIC__/img/tiaojianshaixuan.png"> <span>条件筛选</span> <div class="pull-right"> <input type="text" class="form-control c_seachbgimg" id="phone_query" placeholder="请输入号码查询" /> </div> </div> <div class="condition-content"> <div class="form-inline"> <div class="form-group"> <label class="levelSelect">客户姓名:</label> <input type="text" name="" id="name_query" class="form-control width160 marginr30 " value="" placeholder="请输入客户名称"> </div> <div class="form-group"> <label class="levelSelect ">所属坐席:</label> <select class="form-control width160 marginr30" name="" id="sitchair"> <option value="">全部坐席</option> {volist name="seats" id="seat"} <option value="{$seat.id}">{$seat.username}</option> {/volist} </select> </div> <div class="form-group"> <label class="levelSelect ">所属任务:</label> <select class="form-control width160 marginr30" name="" id="config_id"> <option value="">全部任务</option> {volist name="crm_push_config" id="config"} <option value="{$config.id}">{$config.task_name}</option> {/volist} </select> </div> <div class="form-group"> <label class="levelSelect ">创建时间:</label> <input type="text" name="" class="form-control width160 c_datebgimg " id="startCreateDate" value="" placeholder="开始时间"> <script> $('#startCreateDate').fdatepicker({ format: 'yyyy-mm-dd hh:ii', pickTime: true }); </script> <span class="word marginB4">至</span> <input type="text" name="" class="form-control width160 c_datebgimg" id="endCreateDate" value="" placeholder="结束时间"> <script> $('#endCreateDate').fdatepicker({ format: 'yyyy-mm-dd hh:ii', pickTime: true }); </script> </div> </div> <!--<div class="form-inline" style="margin-bottom:8px!important;">--> <!-- <div class="form-group">--> <!-- <label class="levelSelect">通话次数:</label>--> <!-- <input type="number" name="" id="min_call_count" class="form-control width58" value="" >--> <!-- <span class="word marginB4">至</span>--> <!-- <input type="number" name="" id="max_call_count" class="form-control width58" value="">--> <!-- <span class="word marginB4">次</span>--> <!-- </div>--> <!--</div>--> <div class="form-inline" style="margin-bottom:8px!important;"> <div class="form-inline intention"> <div class="form-group"> <label class="levelSelect">意向等级:</label> </div> <div class="form-group intention"> <input type="checkbox" name="grade_all" value=""> <label>全部</label> </div> <div class="form-group intention"> <input type="checkbox" name="grade" value="6"> <label>A级意向</label> </div> <div class="form-group intention"> <input type="checkbox" name="grade" value="5"> <label>B级意向</label> </div> <div class="form-group intention"> <input type="checkbox" name="grade" value="4"> <label>C级意向</label> </div> </div> </div> <script> $("input[name='grade_all']").click(function(){ if ($("input[name='grade_all']").is(':checked')) { $("input[name='grade']").prop("checked",true) } else { $("input[name='grade']").prop("checked",false) } }); $("input[name='grade']").click(function(){ if($("input[name='grade']:checked").length==3){ $("input[name='grade_all']").prop("checked",true) }else{ $("input[name='grade_all']").prop("checked",false) } }); </script> <div class="form-inline" style="margin-bottom:8px!important;"> <div class="form-inline intention"> <div class="form-group"> <label class="levelSelect">通话查看:</label> </div> <div class="form-group intention"> <input type="checkbox" name="call_all" value=""> <label>全部</label> </div> <div class="form-group intention"> <input type="checkbox" name="call" value="1"> <label>已查看</label> </div> <div class="form-group intention"> <input type="checkbox" name="call" value="0"> <label>未查看</label> </div> </div> </div> <script> $("input[name='call_all']").click(function(){ if ($("input[name='call_all']").is(':checked')) { $("input[name='call']").prop("checked",true) } else { $("input[name='call']").prop("checked",false) } }); $("input[name='call']").click(function(){ if($("input[name='call']:checked").length==2){ $("input[name='call_all']").prop("checked",true) }else{ $("input[name='call_all']").prop("checked",false) } }); </script> <div class="form-inline" style="margin-bottom:8px!important;"> <div class="form-inline intention"> <div class="form-group"> <label class="levelSelect">客户分配:</label> </div> <div class="form-group intention"> <input type="checkbox" name="distribution_all" value=""> <label>全部</label> </div> <div class="form-group intention"> <input type="checkbox" name="distribution" value="1"> <label>已分配</label> </div> <div class="form-group intention"> <input type="checkbox" name="distribution" value="0"> <label>未分配</label> </div> </div> </div> <script> $("input[name='distribution_all']").click(function(){ if ($("input[name='distribution_all']").is(':checked')) { $("input[name='distribution']").prop("checked",true) } else { $("input[name='distribution']").prop("checked",false) } }); $("input[name='distribution']").click(function(){ if($("input[name='distribution']:checked").length==2){ $("input[name='distribution_all']").prop("checked",true) }else{ $("input[name='distribution_all']").prop("checked",false) } }); </script> <div class="form-inline intention"> <div class="form-group"> <label class="levelSelect">客户意愿:</label> </div> <div class="form-group intention"> <input type="checkbox" name="desire_all" value=""> <label>全部</label> </div> <div class="form-group intention"> <input type="checkbox" name="desire" value="0"> <label>未分类</label> </div> <div class="form-group intention"> <input type="checkbox" name="desire" value="1"> <label>有意向</label> </div> <div class="form-group intention"> <input type="checkbox" name="desire" value="2"> <label>沟通中</label> </div> <div class="form-group intention"> <input type="checkbox" name="desire" value="3"> <label>试用中</label> </div> <div class="form-group intention"> <input type="checkbox" name="desire" value="4"> <label>已成交</label> </div> </div> </div> <script> $("input[name='desire_all']").click(function(){ if ($("input[name='desire_all']").is(':checked')) { $("input[name='desire']").prop("checked",true) } else { $("input[name='desire']").prop("checked",false) } }); $("input[name='desire']").click(function(){ if($("input[name='desire']:checked").length==5){ $("input[name='desire_all']").prop("checked",true) }else{ $("input[name='desire_all']").prop("checked",false) } }); </script> <div class="record-list"> <div class="customer-list clearfix"> <div class="pull-left"> <img src="__PUBLIC__/img/jiluliebiao.png"> <span>客户列表</span> </div> <button type="button" class="btn btn-primary search" onclick="ajax_member();">查询</button> <!--<button type="button" class="btn-primary" onclick="start()">test</button>--> <div class="btn-op pull-right"> <!--<button type="button" class="btn btn-primary btn-operation" onclick="constomerAdd();">添加客户</button> <button type="button" class="btn btn-primary btn-operation" onclick="constomerImport();">导入</button>--> {php}if(config('export_phone_status') == true):{/php} <!--<button type="button" class="btn btn-primary btn-operation" onclick="validation10();">导出</button>--> {php}endif;{/php} {if $role_id neq 20} <button type="button" class="btn btn-primary btn-operation" onclick="constomerAdd();">添加客户</button> <button type="button" class="btn btn-primary btn-operation" onclick="constomerImport();">导入</button> <button type="button" class="btn btn-primary btn-operation" onclick="validation10();">导出</button> <button type="button" class="btn btn-primary btn-operation" onclick="allocationOfSeats();">分配坐席</button> <!-- <button type="button" class="btn btn-primary btn-operation" onclick="newTask();">建任务呼叫</button> --> <button class="btn btn-primary btn-operation" type="button" data-title="建任务呼叫" onclick="addNewPlan(this);" >建任务呼叫</button> <button type="button" class="btn btn-primary btn-operation" onclick="customer_delete_all();">删除</button> {/if} </div> </div> <table class="table table-bordered table-hover"> <thead> <tr> <th class="text-center"> <input class="icheckbox_square-blue" id="member_all_check" type="checkbox" name='all_checked'> </th> <th class="text-center">序号</th> <th class="text-center">姓名</th> <th class="text-center">电话</th> <th class="text-center">所属任务</th> <th class="text-center">意向等级</th> <th class="text-center">客户意愿</th> <th class="text-center">所属坐席</th> <th class="text-center">创建时间 </th> <th class="text-center">最后跟进时间</th> <th class="text-center">操作</th> </tr> </thead> <tbody id="memberlist"> </tbody> </table> <div class="component-page-empty" id="consumeempty"> <div class="empty-tip line"> <p><img src="__PUBLIC__/img/none.png" /></p> <p>暂无数据</p> </div> </div> <footer class="main-box-footer clearfix footerB"> <div class="row"> <div class="col-sm-3 text-left"><input class="check-all all_checked_count" name='DataCheck_all' type="checkbox"/>全选(已选中<span id="user_count">0</span>条客户)</div> <div class="col-sm-9 text-right paging"></div> </div> </footer> </div> </div> </div> </div> </div> </div> <!--添加拨打弹窗--> <div class="modal fade" id="joinShout" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true"> <div class="modal-dialog modal-sm" style="width:450px; "> <div class="modal-content"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal" aria-hidden="true"> <span aria-hidden="true">×</span> </button> <h4 class="modal-title" id="myModalLabel"> 添加拨打 </h4> </div> <div class="modal-body l-modal-body" style="padding: 20px 20px 3px;"> <form id="addblacklist-number" method="post" id="addForm" class="form-horizontal margintop" enctype="multipart/form-data" > <div class="form-group"> <label class="col-lg-3 control-label">号码:</label> <div class="col-lg-7 col-sm-7"> <input type="text" class="form-control" name="joinPhone" id="joinPhone" value="" readonly /> </div> </div> <p ></p> <div class="form-group"> <label class="col-lg-3 control-label"><span class="asterisk">*</span>线路:</label> <div class="col-lg-7 col-sm-7"> <select name="line_id" id="line_id" class="form-control"> <option value="">请选择</option> {volist name="line_datas" id="vo"} <option value="{$vo['id']}">{$vo['name']}</option> {/volist} </select> </div> </div> <div class="form-group"> <label class="col-lg-3 control-label"><span class="asterisk">*</span>话术:</label> <div class="col-lg-7 col-sm-7"> <select name="scenarios_id" id="scenarios_id" class="form-control"> <option value="">请选择</option> {volist name="scenarioslist" id="vo"} <option value="{$vo['id']}">{$vo['name']}</option> {/volist} </select> </div> </div> <div class="form-group"> <label class="col-lg-3 control-label"><span class="asterisk">*</span>ASR:</label> <div class="col-lg-7 col-sm-7"> <select name="asr_id" id="asr_id" class="form-control"> <option value="">请选择</option> {volist name="asr_list" id="vo"} <option value="{$vo['id']}">{$vo['name']}</option> {/volist} </select> </div> </div> </form> </div> <div class="modal-footer"> <input type="hidden" id="Nowpagehidden" value=""> <input type="hidden" id="Nowlimithidden" value=""> <button type="button" class="btn btn-default" data-dismiss="modal"> 关闭 </button> <button type="button" class="btn btn-primary" id="users_add" onclick="checkform_dial()" > 确定 </button> </div> </div> </div> </div> <div class="modal fade effect" id="effectTmp" tabindex="1" role="dialog" aria-labelledby="myLargeModalLabel" data-backdrop="static" data-keyboard="false" > <div class="modal-dialog" style="width:365px;"> <div class="modal-content effect-content import"> <div class="modal-header effect-header"> <h4 class="modal-title effect-title" id="singleTel"><span>导入号码</span></h4> </div> <div class="modal-body"> <div class="form-group"> <div class="effect-1"> <span >当前进度</span> <span class="pull-right color90 Progress_value">0%</span> </div> </div> <div class="form-group"> <div class="progress"> <div class="progress-bar progress-bar-data" role="progressbar" aria-valuenow="60" aria-valuemin="0" aria-valuemax="100" style="width: 0%;"> <span class="sr-only">0%完成</span> </div> </div> </div> </div> <div class="modal-footer effect-footer"> <div>取 消</div> </div> </div> <div class="modal-content effect-content hidden finish"> <div class="modal-header effect-header"> <button type="button" class="close" data-dismiss="modal" aria-label="Close"> <span aria-hidden="true">×</span> </button> <h4 class="modal-title effect-title">导入号码</h4> </div> <div class="modal-body"> <div class="form-group effect-flex"> <i class="effect-success"></i> <div class="effect-success-tip" id="effect-tips-content"> </div> </div> </div> <div class="modal-footer effect-footer"> <button type="button" class="btn btn-default" data-dismiss="modal" id="upload_ok">确定</button> </div> </div> </div> </div> <div class="modal fade effect" id="out_effectTmp" tabindex="1" role="dialog" aria-labelledby="myLargeModalLabel" data-backdrop="static" data-keyboard="false" > <div class="modal-dialog" style="width:365px;"> <div class="modal-content effect-content import"> <div class="modal-header effect-header"> <!--<button type="button" class="close" data-dismiss="modal" aria-label="Close"> <span aria-hidden="true">×</span>--> <!--</button>--> <h4 class="modal-title effect-title" id="singleTel"><span>导出号码</span></h4> </div> <div class="modal-body"> <div class="form-group"> <div class="effect-1"> <span >当前进度</span> <span class="pull-right color90 Progress_value">0%</span> </div> </div> <div class="form-group"> <div class="progress"> <div class="progress-bar progress-bar-data" role="progressbar" aria-valuenow="60" aria-valuemin="0" aria-valuemax="100" style="width: 0%;"> <span class="sr-only">0%完成</span> </div> </div> </div> </div> <div class="modal-footer effect-footer"> <div>取 消</div> </div> </div> <div class="modal-content effect-content hidden finish"> <div class="modal-header effect-header"> <button type="button" class="close" data-dismiss="modal" aria-label="Close"> <span aria-hidden="true">×</span> </button> <h4 class="modal-title effect-title">导出号码</h4> </div> <div class="modal-body"> <div class="form-group effect-flex"> <i class="effect-success"></i> <div class="effect-success-tip" id="effect-tips-content_outexcel"> </div> </div> </div> <div class="modal-footer effect-footer"> <button type="button" class="btn btn-default" data-dismiss="modal" id="upload_oks">确定</button> </div> </div> </div> </div> <div id="show_validation1"></div> <!-- 页面js引入 --> <script src="__PUBLIC__/js_CRM/intentional_member.js" charset="utf-8"></script> <!-- 页面所有弹框引入 --> <script> $(function(){ $('#start_date').val(getFormatDate(10)); $('#end_date').val(getFormatDate(10)); }) //导出数据 function validation10() { $("#export-data").modal('show'); $('#sel_excel').unbind('click'); $('#sel_excel').on('click', function() { var typez = 10; var arr = []; $("input[name='checkids'][type='checkbox']:checked").each(function(i) { arr[i] = $(this).val(); }); if (arr.length <= 0) { alert('请选择导出的数据'); return false; } else { <?php if($is_verification == 1): ?> $('#export-data').modal('hide'); $('#show_validation1').html(html); $('#export_val').attr('onclick','export_val('+typez+')') $('#export-validation').modal('show'); msm_send(); <?php else: ?> $('#export-data').modal('hide'); constomerExport(); <?php endif; ?> } }) } // 电话脱敏函数 function maskPhone(phone) { return phone.replace(/(\d{3})\d{4}(\d{4})/, '$1****$2'); } // 修改 ajax_member 函数,在填充数据时进行脱敏处理 function ajax_member() { // 假设这里是原有的 ajax 请求代码 // $.ajax({ // url: 'your_api_url', // method: 'GET', // success: function(response) { // var memberlist = $('#memberlist'); // memberlist.empty(); // response.forEach(function(item, index) { // var maskedPhone = maskPhone(item.phone); // 对电话进行脱敏处理 // var row = '<tr>' + // '<td class="text-center"><input type="checkbox" name="checkids" value="' + item.id + '"></td>' + // '<td class="text-center">' + (index + 1) + '</td>' + // '<td class="text-center">' + item.name + '</td>' + // '<td class="text-center">' + maskedPhone + '</td>' + // '<td class="text-center">' + item.task_name + '</td>' + // '<td class="text-center">' + item.intention_level + '</td>' + // '<td class="text-center">' + item.customer_wish + '</td>' + // '<td class="text-center">' + item.seat_name + '</td>' + // '<td class="text-center">' + item.create_time + '</td>' + // '<td class="text-center">' + item.last_follow_time + '</td>' + // '<td class="text-center"><button onclick="editMember(' + item.id + ')">编辑</button></td>' + // '</tr>'; // memberlist.append(row); // }); // } // }); } </script> {include file="member/dialog" /} {include file="member/crm_calldetail" /} {include file="public/crm_tageter"/} {include file="public/call_wedget"/} {/block}
06-12
================================================== 🐱‍👤猫眼电影数据爬取与分析系统 v2.0 ================================================== ⚠️提示:系统将在浏览器窗口中运行,请勿最小化窗口 爬取过程可能需要3-5分钟,请耐心等待... -------------------------------------------------- C:\Users\ASUS\Desktop\python作业集\.idea\python大作业.py:259: DeprecationWarning: There is no current event loop loop = asyncio.get_event_loop() ⏱️开始执行爬虫... Task exception was never retrieved future: <Task finished name='Task-2' coro=<Connection.run() done, defined at E:\Lib\site-packages\playwright\_impl\_connection.py:272> exception=NotImplementedError()> Traceback (most recent call last): File "E:\Lib\site-packages\playwright\_impl\_connection.py", line 279, in run await self._transport.connect() File "E:\Lib\site-packages\playwright\_impl\_transport.py", line 133, in connect raise exc File "E:\Lib\site-packages\playwright\_impl\_transport.py", line 120, in connect self._proc = await asyncio.create_subprocess_exec( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<9 lines>... ) ^ File "e:\Lib\asyncio\subprocess.py", line 224, in create_subprocess_exec transport, protocol = await loop.subprocess_exec( ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<3 lines>... stderr=stderr, **kwds) ^^^^^^^^^^^^^^^^^^^^^^ File "e:\Lib\asyncio\base_events.py", line 1794, in subprocess_exec transport = await self._make_subprocess_transport( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ protocol, popen_args, False, stdin, stdout, stderr, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ bufsize, **kwargs) ^^^^^^^^^^^^^^^^^^ File "e:\Lib\asyncio\base_events.py", line 539, in _make_subprocess_transport raise NotImplementedError NotImplementedError ❌浏览器初始化失败: ♻️资源已释放 ♻️事件循环已关闭 ❌没有获取到数据,无法分析
06-08
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值