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

JavaScript签证预约检查Bot报错:JSON输入意外结束,求解决

问题分析与修复方案

SyntaxError: Unexpected end of JSON input 本质是你调用的预约日期接口返回的内容不是有效JSON格式,可能是空字符串、登录失效后的HTML页面、或者格式损坏的文本。以下是具体排查和修复步骤:

1. 先捕获错误,查看原始响应内容

在你的await response.json()代码块外层加try-catch,先获取原始响应文本,搞清楚服务器到底返回了什么:

// 替换你原来的response.json()代码段
try {
  const appointmentData = await response.json();
  // 正常处理数据逻辑
} catch (error) {
  // 打印原始响应内容、状态码、响应头
  const rawResponse = await response.text();
  console.log('[原始响应内容]', rawResponse);
  console.log('[响应状态码]', response.status());
  console.log('[响应头]', response.headers());
}

通过这些信息你就能判断:

  • 如果返回HTML,大概率是登录会话失效,需要重新验证登录状态
  • 如果是空字符串,可能是服务器无数据返回或请求参数错误
  • 如果是格式混乱的文本,可能需要先清理再解析

2. 验证登录状态是否真实有效

很多时候看起来登录成功,但实际上会话cookie没正确保留,或者页面有反爬机制(比如隐形验证码)导致登录不彻底。你可以在登录后加一段校验逻辑:

// 登录操作完成后,检查页面是否有登录成功的标识元素(替换成实际页面的选择器)
const hasLoggedIn = await page.$eval('.user-avatar', el => !!el).catch(() => false);
if (!hasLoggedIn) {
  console.log('登录未成功,请检查账号密码或登录流程是否遗漏步骤');
  return;
}
// 也可以直接打印当前页面的cookie,确认会话存在
const cookies = await page.cookies();
console.log('当前会话cookie:', cookies);

3. 模拟真实用户的请求上下文

美领馆的接口通常会校验请求头和会话信息,确保你的请求和浏览器一致:

// 在页面初始化或登录后设置请求头
await page.setExtraHTTPHeaders({
  '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',
  'Referer': 'https://具体的预约页面URL' // 必须是接口所在的页面URL
});

另外,避免直接用page.goto或fetch跳接口,尽量模拟用户点击操作触发接口请求,减少被反爬拦截的概率。

4. 兼容非JSON响应的情况

如果确认接口偶尔会返回非JSON内容,可以做兼容处理:

const rawResponse = await response.text();
if (!rawResponse) {
  console.log('接口返回空内容,跳过');
  return;
}
try {
  const appointmentData = JSON.parse(rawResponse.trim());
  // 处理数据
} catch (error) {
  console.log('非JSON响应,内容:', rawResponse);
  // 这里可以添加重试逻辑或重新登录逻辑
}

内容的提问来源于stack exchange,提问作者Guilherme Doherty Marques

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 22:00:17