<html:messages id=””>标签和<html:errors/>标签

<html:errors>标签与<html:messages>标签都是用来输出request或session范围内的消息的。它们之间有着相同的地方,也有不同的地方。

 

<html:errors/>标签

它表示输出request或session范围内的以“org.apache.struts.Globals.ERROR_KEY”为关键字存储的ActionMessages对象中的所有消息。

可通过以下属性的设置来输出指定的消息。

name属性:指定request或session范围内的关键字,该关键字指定了一个ActionMessages对象。若忽略该属性,则默认的关键字为“org.apache.struts.Globals. ERROR_KEY”。

property 属性:用于指定由name属性指定的关键字指定的ActionMessages对象中的某个消息属性,该消息属性指定了某个ActionMessage对象。若忽略该属性,则<html:errors/>标签会输出指定ActionMessages中的所有消息。

bundle属性:指定消息资源文件。若忽略该属性则从默认的消息资源文件ApplicationResources.properties中获取输出的消息内容。

 

<html:messages>标签

<html:messages>有一个必添项id

该标签与<html:errors>标签相似,同样用来输出消息。它们之间有着相同的地方,也有不同的地方。

1.与<html:errors>标签的相同点

消息来源:<html:messages>标签要输出的消息来源与<html:errors>标签相同,同样可以通过 saveErrors()或saveMessages()方法将ActionMessages对象存入request或session范围内。例如:

ActionMessage messages=new ActionMessages();

errors.add("username",new ActionMessage("com.logon.name.error"));

saveErrors(request,messages);

属性:<html:messages>标签的name属性、property属性、bundle属性以及footer属性、header属性分别与<html:errors/>标签中对应的属性用法相同。

2.与<html:errors>标签的不同点

属性

message 属性,<html:errors>标签中不存在的属性。当忽略该属性或将其设为“false”时,则根据由name属性指定的关键字在 request或session范围中查找该关键字存储的ActionMessages对象,若此时没有设置name属性,则查找以默认关键字 “org.apache.struts.Globals.ERROR_KEY”存储的ActionMessages对象;若将message属性设为 “true”,表示以“org.apache.struts.Globals.MESSAGE_KEY”关键字进行查找,并且此时设置的name属性无效。

id 属性,该属性是<html:messages>标签必须存在的属性,而<html:errors>标签中不存在该属性。它用来指定一个JSP页面变量,该变量代表了每次从ActionMessages对象中遍历出的一个ActionMessage对象。

使用方法:单独使用<html:messages>标签是不能输出消息的。因为该标签完成的操作只是对ActionMessages对象进行遍历,并将每次遍历出的ActionMessage对象存储在id属性所指定的JSP页面变量中。所以通常情况下嵌套<bean:write> 标签一起使用,<bean:write>标签中的name属性要与<html:messages>标签的id属性相匹配。

说明:<bean:write>标签用来输出由name属性指定的对象值。详细的介绍请参看本书中的第8章。

使用<html:messages>标签输出消息的代码如下。

<html:messages id="messageid" message="true">

    <bean:write name="messageid"/>

</html:messages>

saveErrors(request,errors)方法将ActionMessages对象保存到了request范围内,并以“org.apache.struts.Globals.ERROR_KEY”关键字存储。Action基类中saveErrors()方法的关键代码如下。

protected void saveErrors(HttpServletRequest request, ActionMessages errors){

    request.setAttribute(org.apache.struts.Globals.ERROR_KEY,errors);

}

在页面方可通过<html:errors bundle="user" property="nameEmpty"/>来显示相关错误的消息

或者

<html:messages id="error" bundle="user" property="nameEmpty" >
    <bean:write name="error"/>
</html:messages>
来取property="nameEmpty"的单个的错误消息(注:id只是一个标示,只要和bean:write的name属性保持一致即可)
----------------------------------------
或者
<html:messages id="error" bundle="user">
<bean:write name="error"  />
</html:messages>
来取所有的错误消息
相当于
<html:errors bundle="user"/>

另外,还可以通过saveMessages(request,errors)方法将ActionMessages对象保存到request范围内,但此时在request范围中以“org.apache.struts.Globals.MESSAGE_KEY”关键字存储。Action基类中saveMessages()方法的关键代码如下。

protected void saveMessages(HttpServletRequest request, ActionMessages errors) {

    request.setAttribute(org.apache.struts.Globals.MESSAGE_KEY,errors);

}

所以如果使用了saveMessages()方法存储消息,在使用<html:errors>标签输出消息时,要通过name属性来指定在 request或session范围内以“org.apache.struts. Globals.MESSAGE_KEY”关键字来查找ActionMessages对象。否则此时忽略name属性,Struts会使用默认的关键字“org.apache.struts.Globals. ERROR_KEY”进行查找,将找不到存储的消息。

<html:messages id="error" bundle="user" message="true">
<bean:write name="error"  />
</html:messages>
或者

<html:messages id="error" bundle="user" message="true" property="nameEmpty">
<bean:write name="error"  />
</html:messages>

分别来取全部或者是单个的错误消息

 

注意点:

虽然Struts已经声明:不推荐使用ActionErrors & ActionError对象,但在一些遗留的系统中,依然还是可以看到其影子,所以如果你的系统不幸属于这样的两种混合系统,有以下的几种方法可以参考
1。两次调用messagesPresent,如下
<!-- Print ActionErrors Object -->
<logic:messagesPresent>
   <html:messages id="msg" message="true">
     <div class="success">
       <bean:write name="msg"/>
     </div><br/>
   </html:messages>
</logic:messagesPresent>

<!-- Print ActionMessages Object -->
<logic:messagesPresent message="true">
   <html:messages id="msg" message="true">
     <div class="success">
       <bean:write name="msg"/>
     </div><br/>
   </html:messages>
</logic:messagesPresent>

2.分别使用<html:messages> <html:errors>标签,当然在老系统中需要调用Action的saveErrors方法,而在新的应用中要调用saveMessages方法。

3.更换所有的ActionErrors为ActionMessages,并将所有调用saveErrors的地方更换成saveMessages,并将<html:errors>标签相应的更换成<html:messages message="true"> - 推荐!

{% extends "base.html" %} {% block title %}系统管理{% endblock %} {% block content %} <div class="admin-panel"> <h1>管理控制台</h1> <!-- 权限验证 --> {% if not current_user.is_admin %} <div class="alert alert-danger"> 错误:您没有访问此页面的权限 </div> {% else %} <section class="admin-section"> <h2>用户管理</h2> <table class="data-table"> <thead> <tr> <th>ID</th> <th>用户名</th> <th>最后登录</th> </tr> </thead> <tbody> {% for user in user_list %} <tr> <td>{{ user.id }}</td> <td>{{ user.username }}</td> <td>{{ user.last_login | datetimeformat }}</td> </tr> {% endfor %} </tbody> </table> </section> {% endif %} </div> {% endblock %}{% extends "base.html" %} {% block title %}用户登录{% endblock %} {% block content %} <form class="auth-form" method="POST" action="{{ url_for('login') }}"> <h2>用户登录</h2> <!-- CSRF保护 --> <input type="hidden" name="csrf_token" value="{{ csrf_token() }}"> <div class="form-group"> <label for="username">用户名:</label> <input type="text" id="username" name="username" required pattern="[A-Za-z0-9]{3,20}" title="仅允许字母数字 (3-20字符)"> </div> <div class="form-group"> <label for="password">密码:</label> <input type="password" id="password" name="password" required minlength="8" title="至少8位字符"> </div> <button type="submit" class="btn-primary">登录</button> <!-- 安全增强措施 --> <div class="security-tips"> <p>🔒 采用HTTPS加密传输</p > <p>⚠ 登录失败3次将锁定账户</p > </div> </form> {% endblock %}<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>{% block title %}安全增强网站{% endblock %}</title> <link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}"> </head> <body> <header class="navbar"> <nav> 首页 {% if current_user.is_authenticated %} 登出 {% if current_user.is_admin %} 管理后台 {% endif %} {% else %} 登录 {% endif %} </nav> </header> <main class="container"> <!-- 安全警告显示区域 --> {% with messages = get_flashed_messages(with_categories=true) %} {% if messages %} {% for category, message in messages %} <div class="alert alert-{{ category }}"> {{ message }} </div> {% endfor %} {% endif %} {% endwith %} {% block content %}{% endblock %} </main> <script src="{{ url_for('static', filename='main.js') }}"></script> </body> </html>这三个代码你写的相比真么样
03-16
C:\own\app\python_code\.venv\Scripts\python.exe C:\own\app\python_code\work\入职培训\打印点击\click.py 页面已加载完成 当前页面 URL: http://10.244.1.179:3000/auth?redirect=%2F 页面标题: NexaAI === 页面 HTML 内容 === <html lang="ja-JP" class="light"><head> <meta charset="utf-8"> <link rel="icon" type="image/png" href="http://10.244.1.179:3000/static/favicon.png"> <link rel="icon" type="image/png" href="http://10.244.1.179:3000/static/favicon-96x96.png" sizes="96x96"> <link rel="icon" type="image/svg+xml" href="http://10.244.1.179:3000/static/favicon.svg"> <link rel="shortcut icon" href="http://10.244.1.179:3000/static/favicon.ico"> <link rel="apple-touch-icon" sizes="180x180" href="http://10.244.1.179:3000/static/apple-touch-icon.png"> <meta name="apple-mobile-web-app-title" content="Open WebUI"> <link rel="manifest" href="/manifest.json"> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, viewport-fit=cover"> <meta name="theme-color" content="#ffffff"> <meta name="robots" content="noindex,nofollow"> <meta name="description" content="Open WebUI"> <link rel="search" type="application/opensearchdescription+xml" title="Open WebUI" href="/opensearch.xml"> <script src="/static/loader.js" defer=""></script> <script> function resizeIframe(obj) { obj.style.height = obj.contentWindow.document.documentElement.scrollHeight + 'px'; } </script> <script> // On page load or when changing themes, best to add inline in `head` to avoid FOUC (() => { const metaThemeColorTag = document.querySelector('meta[name="theme-color"]'); const prefersDarkTheme = window.matchMedia('(prefers-color-scheme: dark)').matches; if (!localStorage?.theme) { localStorage.theme = 'system'; } if (localStorage.theme === 'system') { document.documentElement.classList.add(prefersDarkTheme ? 'dark' : 'light'); metaThemeColorTag.setAttribute('content', prefersDarkTheme ? '#171717' : '#ffffff'); } else if (localStorage.theme === 'oled-dark') { document.documentElement.style.setProperty('--color-gray-800', '#101010'); document.documentElement.style.setProperty('--color-gray-850', '#050505'); document.documentElement.style.setProperty('--color-gray-900', '#000000'); document.documentElement.style.setProperty('--color-gray-950', '#000000'); document.documentElement.classList.add('dark'); metaThemeColorTag.setAttribute('content', '#000000'); } else if (localStorage.theme === 'light') { document.documentElement.classList.add('light'); metaThemeColorTag.setAttribute('content', '#ffffff'); } else if (localStorage.theme === 'her') { document.documentElement.classList.add('dark'); document.documentElement.classList.add('her'); metaThemeColorTag.setAttribute('content', '#983724'); } else { document.documentElement.classList.add('dark'); metaThemeColorTag.setAttribute('content', '#171717'); } window.matchMedia('(prefers-color-scheme: dark)').addListener((e) => { if (localStorage.theme === 'system') { if (e.matches) { document.documentElement.classList.add('dark'); document.documentElement.classList.remove('light'); metaThemeColorTag.setAttribute('content', '#171717'); } else { document.documentElement.classList.add('light'); document.documentElement.classList.remove('dark'); metaThemeColorTag.setAttribute('content', '#ffffff'); } } }); function setSplashImage() { const logo = document.getElementById('logo'); const isDarkMode = document.documentElement.classList.contains('dark'); if (isDarkMode) { const darkImage = new Image(); darkImage.src = '/static/splash-dark.png'; darkImage.onload = () => { logo.src = '/static/splash-dark.png'; logo.style.filter = ''; // Ensure no inversion is applied if splash-dark.png exists }; darkImage.onerror = () => { logo.style.filter = 'invert(1)'; // Invert image if splash-dark.png is missing }; } } // Runs after classes are assigned window.onload = setSplashImage; })(); </script> <title> NexaAI </title> <link rel="modulepreload" href="/_app/immutable/entry/start.CWjHXy_1.js"> <link rel="modulepreload" href="/_app/immutable/chunks/Dc2J8k-i.js"> <link rel="modulepreload" href="/_app/immutable/chunks/vexCXLX9.js"> <link rel="modulepreload" href="/_app/immutable/chunks/tMLpXUqA.js"> <link rel="modulepreload" href="/_app/immutable/entry/app.C1Q9Thd4.js"> <link rel="modulepreload" href="/_app/immutable/chunks/C1FmrZbK.js"> <link rel="modulepreload" href="/_app/immutable/chunks/Cdll-xsj.js"> <link rel="modulepreload" as="script" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/nodes/0.DR_FJq3-.js"><link rel="modulepreload" as="script" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/chunks/D0QH3NT1.js"><link rel="modulepreload" as="script" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/chunks/CGwCSIWv.js"><link rel="modulepreload" as="script" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/chunks/CFHyBaVQ.js"><link rel="modulepreload" as="script" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/chunks/BukaNoIw.js"><link rel="modulepreload" as="script" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/chunks/BIbd1MJ8.js"><link rel="modulepreload" as="script" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/chunks/DNXpXRYa.js"><link rel="modulepreload" as="script" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/chunks/CgU5AtxT.js"><link rel="modulepreload" as="script" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/chunks/DMk2eJ1b.js"><link rel="stylesheet" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/assets/Toaster.DQwrSZtH.css"><link rel="modulepreload" as="script" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/chunks/CDcqp4_E.js"><link rel="modulepreload" as="script" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/chunks/Czj-sgwA.js"><link rel="modulepreload" as="script" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/chunks/aTHIJebK.js"><link rel="modulepreload" as="script" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/chunks/CP0bUBgf.js"><link rel="modulepreload" as="script" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/chunks/DzPZp32Y.js"><link rel="modulepreload" as="script" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/chunks/CO3zBKfu.js"><link rel="modulepreload" as="script" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/chunks/B1Cj3nBs.js"><link rel="modulepreload" as="script" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/chunks/CAlHZbz_.js"><link rel="modulepreload" as="script" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/chunks/QjJsDpFa.js"><link rel="modulepreload" as="script" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/chunks/B-5IdZ8W.js"><link rel="modulepreload" as="script" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/chunks/_0_gBwjO.js"><link rel="modulepreload" as="script" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/chunks/DzHlmjPS.js"><link rel="stylesheet" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/assets/0.Bi1jCloK.css"><link rel="modulepreload" as="script" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/nodes/1.DeaInlRZ.js"><link rel="modulepreload" as="script" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/nodes/2.DXlXCRMw.js"><link rel="modulepreload" as="script" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/chunks/CoGXDCUN.js"><link rel="modulepreload" as="script" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/chunks/DOlMLN9E.js"><link rel="modulepreload" as="script" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/chunks/Ccw7PXcW.js"><link rel="modulepreload" as="script" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/chunks/CeVo9uNa.js"><link rel="modulepreload" as="script" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/chunks/Dwe7Dx0L.js"><link rel="modulepreload" as="script" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/chunks/CNKIoFhp.js"><link rel="modulepreload" as="script" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/chunks/r_-JQrIr.js"><link rel="modulepreload" as="script" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/chunks/g5t9vw8M.js"><link rel="stylesheet" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/assets/Modal.CyLKLEmt.css"><link rel="modulepreload" as="script" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/chunks/Cmfly5_1.js"><link rel="modulepreload" as="script" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/chunks/DBcgpmMt.js"><link rel="modulepreload" as="script" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/chunks/CyFe254w.js"><link rel="modulepreload" as="script" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/chunks/BPFKsglW.js"><link rel="modulepreload" as="script" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/chunks/4edIpoVY.js"><link rel="modulepreload" as="script" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/chunks/Cj1VNQDw.js"><link rel="modulepreload" as="script" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/chunks/CzvQehHf.js"><link rel="stylesheet" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/assets/ConfirmDialog.kaSBQ3kP.css"><link rel="modulepreload" as="script" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/chunks/BEcXOGUf.js"><link rel="modulepreload" as="script" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/chunks/CgO5y2dz.js"><link rel="modulepreload" as="script" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/chunks/C3b0NVzq.js"><link rel="modulepreload" as="script" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/chunks/B2UduZ6H.js"><link rel="modulepreload" as="script" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/chunks/BSV6efvU.js"><link rel="modulepreload" as="script" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/chunks/DVUh9ssa.js"><link rel="modulepreload" as="script" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/chunks/BM7xxx70.js"><link rel="modulepreload" as="script" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/chunks/clYaQkaN.js"><link rel="modulepreload" as="script" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/chunks/BfKRbBRz.js"><link rel="modulepreload" as="script" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/chunks/Cmi_MrK3.js"><link rel="modulepreload" as="script" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/chunks/Ql21FIhE.js"><link rel="modulepreload" as="script" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/chunks/Cux5bsOp.js"><link rel="modulepreload" as="script" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/chunks/Dqzunhkh.js"><link rel="modulepreload" as="script" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/chunks/B82-hoyY.js"><link rel="modulepreload" as="script" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/chunks/D8_ibWhm.js"><link rel="modulepreload" as="script" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/chunks/zq5lm5NL.js"><link rel="modulepreload" as="script" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/chunks/Vcq4gwWv.js"><link rel="modulepreload" as="script" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/chunks/DFmftyrH.js"><link rel="modulepreload" as="script" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/chunks/E_9Yx2fg.js"><link rel="modulepreload" as="script" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/chunks/EAbdi5pM.js"><link rel="stylesheet" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/assets/Collapsible.n0yu5Luq.css"><link rel="modulepreload" as="script" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/chunks/eoSdaunV.js"><link rel="modulepreload" as="script" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/chunks/BbEqRSGc.js"><link rel="modulepreload" as="script" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/chunks/wCkNrLrd.js"><link rel="modulepreload" as="script" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/chunks/B0bLxc3w.js"><link rel="modulepreload" as="script" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/chunks/C_k5fUUc.js"><link rel="modulepreload" as="script" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/chunks/BB4UpzdJ.js"><link rel="modulepreload" as="script" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/chunks/B2_kFBW1.js"><link rel="modulepreload" as="script" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/chunks/B5WJB5_d.js"><link rel="modulepreload" as="script" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/chunks/BDIBumUL.js"><link rel="modulepreload" as="script" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/chunks/Dok_iF0y.js"><link rel="modulepreload" as="script" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/chunks/Bv32LYOs.js"><link rel="modulepreload" as="script" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/chunks/B_i_4WXY.js"><link rel="modulepreload" as="script" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/chunks/C1MAXM9h.js"><link rel="modulepreload" as="script" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/chunks/DjtyHjFA.js"><link rel="stylesheet" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/assets/2.DCaWBdws.css"><link rel="modulepreload" as="script" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/nodes/7.CK_iGbn1.js"><link rel="modulepreload" as="script" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/chunks/FFYqNh_T.js"><link rel="modulepreload" as="script" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/chunks/C9ghhw3U.js"><link rel="modulepreload" as="script" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/chunks/Dmyta-sb.js"><link rel="modulepreload" as="script" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/chunks/B-0C4jFw.js"><link rel="modulepreload" as="script" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/chunks/DPNwJ9Qj.js"><link rel="modulepreload" as="script" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/chunks/RDsJZcDg.js"><link rel="modulepreload" as="script" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/chunks/Bg90pfdX.js"><link rel="stylesheet" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/assets/RichTextInput.Bx2lu9jm.css"><link rel="modulepreload" as="script" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/chunks/Dl2oXh-b.js"><link rel="modulepreload" as="script" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/chunks/C1aJcgtK.js"><link rel="modulepreload" as="script" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/chunks/CU2r43ac.js"><link rel="modulepreload" as="script" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/chunks/B-ayMCb0.js"><link rel="modulepreload" as="script" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/chunks/B6KJ2Dak.js"><link rel="modulepreload" as="script" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/chunks/B7Y7zPCh.js"><link rel="modulepreload" as="script" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/chunks/Qas6dQh7.js"><link rel="modulepreload" as="script" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/chunks/C9ixBG4r.js"><link rel="modulepreload" as="script" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/chunks/3MBy-zZd.js"><link rel="modulepreload" as="script" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/chunks/BoacWIEu.js"><link rel="stylesheet" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/assets/Messages.Bbuu_qma.css"><link rel="modulepreload" as="script" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/chunks/BBnwouCf.js"><link rel="modulepreload" as="script" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/chunks/BwV8MUUU.js"><link rel="modulepreload" as="script" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/chunks/-T4crmal.js"><link rel="modulepreload" as="script" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/chunks/ByceAfEH.js"><link rel="modulepreload" as="script" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/chunks/Da5sXaJp.js"><link rel="stylesheet" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/assets/Help.CWA0G-PE.css"><link crossorigin="anonymous" rel="icon" href="http://10.244.1.179:3000/static/favicon.png"><link rel="modulepreload" as="script" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/nodes/35.CxTTQj01.js"><link rel="stylesheet" crossorigin="" href="http://10.244.1.179:3000/_app/immutable/assets/35.DUP86x5U.css"></head> <body data-sveltekit-preload-data="hover"> <div style="display: contents"> <script> { __sveltekit_1baewk5 = { base: "" }; const element = document.currentScript.parentElement; Promise.all([ import("/_app/immutable/entry/start.CWjHXy_1.js"), import("/_app/immutable/entry/app.C1Q9Thd4.js") ]).then(([kit, app]) => { kit.start(app, element); }); } </script> <div class="w-full h-screen max-h-[100dvh] text-white relative"><div class="w-full h-full absolute top-0 left-0 bg-white dark:bg-black"></div> <div class="w-full absolute top-0 left-0 right-0 h-8 drag-region"></div> <div class="fixed m-10 z-50"><div class="flex space-x-2"><div class="self-center"><img id="logo" crossorigin="anonymous" src="/static/splash.png" class="w-6 rounded-full" alt="logo"></div></div></div> <div class="fixed bg-transparent min-h-screen w-full flex justify-center font-primary z-50 text-black dark:text-white"><div class="w-full sm:max-w-md px-10 min-h-screen flex flex-col text-center"><div class="my-auto pb-10 w-full dark:text-gray-100"><form class="flex flex-col justify-center"><div class="mb-1"><div class="text-2xl font-medium">Sign in to NexaAI</div> </div> <div class="flex flex-col mt-4"> <div class="mb-2"><div class="text-sm font-medium text-left mb-1">メールアドレス</div> <input type="email" class="my-0.5 w-full text-sm outline-hidden bg-transparent" autocomplete="email" name="email" placeholder="メールアドレスを入力してください" required=""></div> <div><div class="text-sm font-medium text-left mb-1">パスワード</div> <input type="password" class="my-0.5 w-full text-sm outline-hidden bg-transparent" placeholder="パスワードを入力してください" autocomplete="current-password" name="current-password" required=""></div></div> <div class="mt-5"><button class="bg-gray-700/5 hover:bg-gray-700/10 dark:bg-gray-100/5 dark:hover:bg-gray-100/10 dark:text-gray-300 dark:hover:text-white transition w-full rounded-full font-medium text-sm py-2.5" type="submit">サインイン</button> <div class="mt-4 text-sm text-center">アカウントをお持ちではありませんか? <button class="font-medium underline" type="button">サインアップ</button></div></div></form> </div></div></div></div> <div id="svelte-announcer" aria-live="assertive" aria-atomic="true" style="position: absolute; left: 0px; top: 0px; clip: rect(0px, 0px, 0px, 0px); clip-path: inset(50%); overflow: hidden; white-space: nowrap; width: 1px; height: 1px;">NexaAI</div></div> <style type="text/css" nonce=""> html { overflow-y: hidden !important; } #splash-screen { background: #fff; } html.dark #splash-screen { background: #000; } html.her #splash-screen { background: #983724; } #logo-her { display: none; } #progress-background { display: none; } #progress-bar { display: none; } html.her #logo { display: none; } html.her #logo-her { display: block; filter: invert(1); } html.her #progress-background { display: block; } html.her #progress-bar { display: block; } @media (max-width: 24rem) { html.her #progress-background { display: none; } html.her #progress-bar { display: none; } } @keyframes pulse { 50% { opacity: 0.65; } } .animate-pulse-fast { animation: pulse 1.5s cubic-bezier(0.4, 0, 0.6, 1) infinite; } </style> </body></html> === 页面 HTML 内容结束 === 共找到 2 个可点击元素 正在点击第 1 个元素:标签=button, 文本='サインイン', 位置={'x': 280, 'y': 464} 无法点击第 1 个元素:Message: stale element reference: stale element not found in the current frame (Session info: chrome=138.0.7204.184); For documentation on this error, please visit: https://www.selenium.dev/documentation/webdriver/troubleshooting/errors#staleelementreferenceexception Stacktrace: GetHandleVerifier [0x0x7ff64386e415+77285] GetHandleVerifier [0x0x7ff64386e470+77376] (No symbol) [0x0x7ff643639a6a] (No symbol) [0x0x7ff643641419] (No symbol) [0x0x7ff6436444cc] (No symbol) [0x0x7ff64364459f] (No symbol) [0x0x7ff6436925ed] (No symbol) [0x0x7ff6436833c3] (No symbol) [0x0x7ff6436b860a] (No symbol) [0x0x7ff643682d06] (No symbol) [0x0x7ff6436b8820] (No symbol) [0x0x7ff6436e087f] (No symbol) [0x0x7ff6436b83e3] (No symbol) [0x0x7ff643681521] (No symbol) [0x0x7ff6436822b3] GetHandleVerifier [0x0x7ff643b51efd+3107021] GetHandleVerifier [0x0x7ff643b4c29d+3083373] GetHandleVerifier [0x0x7ff643b6bedd+3213485] GetHandleVerifier [0x0x7ff64388884e+184862] GetHandleVerifier [0x0x7ff64389055f+216879] GetHandleVerifier [0x0x7ff643877084+113236] GetHandleVerifier [0x0x7ff643877239+113673] GetHandleVerifier [0x0x7ff64385e298+11368] BaseThreadInitThunk [0x0x7ff83b8c259d+29] RtlUserThreadStart [0x0x7ff83be4af78+40] 无法点击第 2 个元素:Message: stale element reference: stale element not found in the current frame (Session info: chrome=138.0.7204.184); For documentation on this error, please visit: https://www.selenium.dev/documentation/webdriver/troubleshooting/errors#staleelementreferenceexception Stacktrace: GetHandleVerifier [0x0x7ff64386e415+77285] GetHandleVerifier [0x0x7ff64386e470+77376] (No symbol) [0x0x7ff643639a6a] (No symbol) [0x0x7ff643641419] (No symbol) [0x0x7ff643644811] (No symbol) [0x0x7ff6436e1c0b] (No symbol) [0x0x7ff6436b860a] (No symbol) [0x0x7ff6436e087f] (No symbol) [0x0x7ff6436b83e3] (No symbol) [0x0x7ff643681521] (No symbol) [0x0x7ff6436822b3] GetHandleVerifier [0x0x7ff643b51efd+3107021] GetHandleVerifier [0x0x7ff643b4c29d+3083373] GetHandleVerifier [0x0x7ff643b6bedd+3213485] GetHandleVerifier [0x0x7ff64388884e+184862] GetHandleVerifier [0x0x7ff64389055f+216879] GetHandleVerifier [0x0x7ff643877084+113236] GetHandleVerifier [0x0x7ff643877239+113673] GetHandleVerifier [0x0x7ff64385e298+11368] BaseThreadInitThunk [0x0x7ff83b8c259d+29] RtlUserThreadStart [0x0x7ff83be4af78+40] Process finished with exit code 0
最新发布
08-09
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值