网页抓取犯罪表格:基于innerHTML中color元素修改bonus变量失败
问题分析与解决方案
核心问题排查
你的代码存在几个关键错误,导致无法正确识别color元素并设置bonus:
- 变量名拼写错误:代码中误用
crime.Data[3],实际定义的数组是crimeData,拼写错误导致无法访问数组内容 - 常量无法重新赋值:
const bonus声明后不能修改值,需改为let bonus - 纯文本提取错误:直接用
x.innerHTML会保留HTML标签,要提取纯文本需用jQuery的text()方法 - 逻辑覆盖问题:三个独立
if语句会依次覆盖bonus值,建议用else if避免后续条件覆盖前置结果
修正后的代码片段
let checkCrimes = { "check": function() { if (user.stamina < 690) { let randomTimer = Math.floor(Math.random() * 300 + 900); checkCrimes.queue(randomTimer); } else if ($(gameDocument).find('#crimebubble').length) { let crimeCooldown = $(gameDocument).find("#crimebubble>.countdown").eq(0).text().split(":"); crimeCooldown = crimeCooldown.map((x, i) => { if (i === 0) { return Number(x) * 60; } else { return Number(x); } }); crimeCooldown = crimeCooldown.reduce((a, b) => a + b); checkCrimes.queue(crimeCooldown); } else if ($(gameDocument).find('#form_crimes').length) { let lastPostTime = localStorage.getItem('lastPostTime') || 0; if ($(gameDocument).find('#form_crimes input[type="radio"]').length > 10) { // Handle other cases or skip if necessary } else { let crimeList = []; $(gameDocument).find('#form_crimes tbody tr').each(function() { // 提取每个td的纯文本,用于最终存储 const crimeData = $(this).find('td').toArray().map(x => $(x).text().trim()); // 保留原始innerHTML,用于检测color样式 const crimeHtml = $(this).find('td').toArray().map(x => x.innerHTML); if (crimeData.includes('--')) { return; // 排除包含"--"的条目 } let bonus = "testfailed"; // 修正变量名,用crimeHtml检测color元素 if (crimeHtml[3].includes('color')) { bonus = "Stealth" } else if (crimeHtml[2].includes('color')) { bonus = "Defense" } else if (crimeHtml[1].includes('color')) { bonus = "Offense" } // trimmedCrimeData存入纯文本内容 const trimmedCrimeData = [crimeData[1], crimeData[2], crimeData[3], crimeData[6], bonus]; crimeList.push(trimmedCrimeData); }); } } };
关键修改说明
- 分离文本与HTML:同时提取
crimeData(纯文本)和crimeHtml(原始HTML),既满足存入纯文本的需求,又能准确检测color样式 - 修正变量与赋值规则:将
const bonus改为let bonus,修正crime.Data为crimeHtml,确保变量可修改且能正确访问 - 优化逻辑判断:用
else if确保只有第一个匹配的条件生效,避免后续条件覆盖已设置的bonus值 - 纯文本提取优化:使用
$(x).text().trim()去除HTML标签和多余空格,得到干净的文本内容
内容的提问来源于stack exchange,提问作者Thomas Young
相关产品推荐
相关产品推荐

