You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Chrome扩展GET请求返回含目标字符串但split无效求助

问题排查与解决方案

可能原因分析

  • 反爬拦截与请求头缺失
    Rightmove这类房产网站带有反爬机制,你的fetch请求仅设置了Content-Type,缺少浏览器常用的请求头(如User-Agent、Accept等),服务器可能识别为非浏览器请求,返回了与实际页面不同的内容,自然找不到目标标识。
  • 动态内容未渲染
    bis_skin_checked可能是页面加载后通过JavaScript动态生成的,而fetch获取的是服务器返回的原始HTML,并未执行页面中的JS,所以原始HTML里根本没有这个字符串。
  • 字符串匹配细节问题
    虽然你说页面明确包含,但可以先确认是否存在大小写差异、特殊字符转义(如下划线是否被转义)等情况,不过这种概率较低。

针对性解决方案

方案1:完善请求头,模拟浏览器请求

修改你的getNewPage函数,添加浏览器标准请求头,让服务器返回正常页面内容:

function getNewPage(url) {
    return fetch(url, {
        method: 'GET',
        headers: {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36',
            'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8',
            'Accept-Language': 'en-US,en;q=0.5',
            'Referer': 'https://www.rightmove.co.uk/'
        },
    })
    .then(response => response.text());
}

之后先验证返回内容是否包含目标字符串:

getNewPage(yourUrl).then(value => {
    console.log(value.includes('bis_skin_checked')); // 先确认是否为true
    console.log(value.split('bis_skin_checked').length);
});

方案2:获取渲染后的页面内容(推荐)

如果目标标识是JS动态生成的,直接fetch原始HTML肯定拿不到,此时应该用Chrome扩展的API获取已渲染的页面内容:
使用chrome.scripting.executeScript(Manifest V3)或者chrome.tabs.executeScript(Manifest V2)注入脚本,获取页面中的目标内容:

// Manifest V3 示例
chrome.scripting.executeScript({
    target: { tabId: 当前标签ID },
    func: () => {
        // 在页面上下文里查找目标标识
        return document.documentElement.innerHTML.includes('bis_skin_checked');
    }
}).then(results => {
    console.log(results[0].result); // 查看是否存在
    // 也可以直接返回页面HTML
    chrome.scripting.executeScript({
        target: { tabId: 当前标签ID },
        func: () => document.documentElement.innerHTML
    }).then(htmlResults => {
        console.log(htmlResults[0].result.split('bis_skin_checked').length);
    });
});

方案3:直接检查页面DOM元素

如果bis_skin_checked是某个元素的类名或属性,还可以直接定位元素:

// 页面上下文内执行
const hasTarget = document.querySelector('.bis_skin_checked') !== null;
// 或者检查属性
const hasAttr = document.querySelector('[bis_skin_checked]') !== null;

验证步骤

  1. 先在浏览器直接访问目标URL,打开开发者工具的「网络」面板,查看请求的所有头信息,完全复制到你的fetch请求中,避免头信息缺失。
  2. 打印fetch返回的完整text内容,搜索是否真的包含bis_skin_checked,排除视觉误判。
  3. 若确认是动态内容,切换到Chrome扩展的脚本注入方式获取渲染后的页面。

内容的提问来源于stack exchange,提问作者StevenGerrard69420

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 00:50:51