(startStep, context = {})
| 5010 | } |
| 5011 | |
| 5012 | async function runAutoSequenceFromStep(startStep, context = {}) { |
| 5013 | const { targetRun, totalRuns, attemptRuns, continued = false } = context; |
| 5014 | let postStep6RestartCount = 0; |
| 5015 | |
| 5016 | if (continued) { |
| 5017 | await addLog(`=== 目标 ${targetRun}/${totalRuns} 轮:继续当前进度,从步骤 ${startStep} 开始(第 ${attemptRuns} 次尝试)===`, 'info'); |
| 5018 | } else { |
| 5019 | await addLog(`=== 目标 ${targetRun}/${totalRuns} 轮:第 ${attemptRuns} 次尝试,阶段 1,打开官网并进入密码页 ===`, 'info'); |
| 5020 | } |
| 5021 | |
| 5022 | if (startStep <= 1) { |
| 5023 | await executeStepAndWait(1, AUTO_STEP_DELAYS[1]); |
| 5024 | } |
| 5025 | |
| 5026 | if (startStep <= 2) { |
| 5027 | await ensureAutoEmailReady(targetRun, totalRuns, attemptRuns); |
| 5028 | await executeStepAndWait(2, AUTO_STEP_DELAYS[2]); |
| 5029 | } |
| 5030 | |
| 5031 | if (startStep <= 3) { |
| 5032 | const latestState = await getState(); |
| 5033 | const step3Status = latestState.stepStatuses?.[3] || 'pending'; |
| 5034 | await addLog(`=== 目标 ${targetRun}/${totalRuns} 轮:阶段 2,填写密码、验证、登录并完成授权(第 ${attemptRuns} 次尝试)===`, 'info'); |
| 5035 | await broadcastAutoRunStatus('running', { |
| 5036 | currentRun: targetRun, |
| 5037 | totalRuns, |
| 5038 | attemptRun: attemptRuns, |
| 5039 | }); |
| 5040 | if (isStepDoneStatus(step3Status)) { |
| 5041 | await addLog(`自动运行:步骤 3 当前状态为 ${step3Status},将直接继续后续流程。`, 'info'); |
| 5042 | } else { |
| 5043 | await executeStepAndWait(3, AUTO_STEP_DELAYS[3]); |
| 5044 | } |
| 5045 | } else { |
| 5046 | await addLog(`=== 目标 ${targetRun}/${totalRuns} 轮:继续执行剩余流程(第 ${attemptRuns} 次尝试)===`, 'info'); |
| 5047 | } |
| 5048 | |
| 5049 | const signupTabId = await getTabId('signup-page'); |
| 5050 | if (signupTabId) { |
| 5051 | await chrome.tabs.update(signupTabId, { active: true }); |
| 5052 | } |
| 5053 | |
| 5054 | let step = Math.max(startStep, 4); |
| 5055 | while (step <= 9) { |
| 5056 | try { |
| 5057 | await executeStepAndWait(step, AUTO_STEP_DELAYS[step]); |
| 5058 | const latestState = await getState(); |
| 5059 | if (step === 6 && shouldSkipLoginVerificationForCpaCallback(latestState)) { |
| 5060 | step = 8; |
| 5061 | continue; |
| 5062 | } |
| 5063 | step += 1; |
| 5064 | } catch (err) { |
| 5065 | const restartDecision = await getPostStep6AutoRestartDecision(step, err); |
| 5066 | if (restartDecision.shouldRestart) { |
| 5067 | postStep6RestartCount += 1; |
| 5068 | const authState = restartDecision.authState; |
| 5069 | const authStateLabel = authState?.state ? getLoginAuthStateLabel(authState.state) : '未知页面'; |
no test coverage detected