Explorar el Código

feat: 增强注册入口诊断功能,添加对可见操作的识别和筛选

QLHazyCoder hace 4 meses
padre
commit
6bd00e9129
Se han modificado 2 ficheros con 34 adiciones y 1 borrados
  1. 24 0
      content/signup-page.js
  2. 10 1
      tests/signup-entry-diagnostics.test.js

+ 24 - 0
content/signup-page.js

@@ -369,6 +369,25 @@ function getSignupEntryDiagnostics() {
   const actionCandidates = document.querySelectorAll(
     'a, button, [role="button"], [role="link"], input[type="button"], input[type="submit"]'
   );
+  const allActions = Array.from(actionCandidates).map((el) => {
+    const rect = typeof el?.getBoundingClientRect === 'function'
+      ? el.getBoundingClientRect()
+      : null;
+    const text = getActionText(el);
+    return {
+      tag: (el.tagName || '').toLowerCase(),
+      type: el.getAttribute?.('type') || '',
+      text: text.slice(0, 80),
+      visible: isVisibleElement(el),
+      enabled: isActionEnabled(el),
+      rect: rect
+        ? {
+            width: Math.round(rect.width || 0),
+            height: Math.round(rect.height || 0),
+          }
+        : null,
+    };
+  });
   const visibleActions = Array.from(actionCandidates)
     .filter(isVisibleElement)
     .slice(0, 12)
@@ -379,6 +398,9 @@ function getSignupEntryDiagnostics() {
       enabled: isActionEnabled(el),
     }))
     .filter((item) => item.text);
+  const signupLikeActions = allActions
+    .filter((item) => item.text && SIGNUP_ENTRY_TRIGGER_PATTERN.test(item.text))
+    .slice(0, 12);
 
   return {
     url: location.href,
@@ -386,6 +408,8 @@ function getSignupEntryDiagnostics() {
     readyState: document.readyState || '',
     hasEmailInput: Boolean(getSignupEmailInput()),
     hasPasswordInput: Boolean(getSignupPasswordInput()),
+    bodyContainsSignupText: SIGNUP_ENTRY_TRIGGER_PATTERN.test(getPageTextSnapshot()),
+    signupLikeActions,
     visibleActions,
     bodyTextPreview: getPageTextSnapshot().slice(0, 240),
   };

+ 10 - 1
tests/signup-entry-diagnostics.test.js

@@ -52,7 +52,8 @@ function extractFunction(name) {
 }
 
 test('signup entry diagnostics summarizes current page inputs and visible actions', () => {
-  const api = new Function(`
+const api = new Function(`
+const SIGNUP_ENTRY_TRIGGER_PATTERN = /免费注册|立即注册|注册|sign\\s*up|register|create\\s*account|create\\s+account/i;
 const location = { href: 'https://chatgpt.com/' };
 const document = {
   title: 'ChatGPT',
@@ -67,6 +68,9 @@ const document = {
           tagName: 'BUTTON',
           textContent: 'Get started',
           disabled: false,
+          getBoundingClientRect() {
+            return { width: 120, height: 40 };
+          },
           getAttribute(name) {
             return name === 'type' ? 'button' : '';
           },
@@ -75,6 +79,9 @@ const document = {
           tagName: 'A',
           textContent: 'Log in',
           disabled: false,
+          getBoundingClientRect() {
+            return { width: 96, height: 40 };
+          },
           getAttribute() {
             return '';
           },
@@ -129,6 +136,8 @@ return {
   assert.equal(result.readyState, 'complete');
   assert.equal(result.hasEmailInput, false);
   assert.equal(result.hasPasswordInput, false);
+  assert.equal(result.bodyContainsSignupText, false);
+  assert.deepStrictEqual(result.signupLikeActions, []);
   assert.deepStrictEqual(result.visibleActions, [
     { tag: 'button', type: 'button', text: 'Get started', enabled: true },
     { tag: 'a', type: '', text: 'Log in', enabled: true },