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

如何使用Puppeteer实现NTLM认证?page.authenticate()无域参数咨询

如何用Puppeteer实现带域信息的NTLM认证

你提到的page.authenticate()确实只支持传入username和password,没法直接设置域信息,但我有两个亲测有效的方案可以解决这个问题:

方案1:启动浏览器时配置credentials选项

Puppeteer的launch()方法提供了credentials配置项,专门适配NTLM这类需要域的认证场景。你可以指定目标站点的源地址、用户名、密码和域,浏览器会自动在请求该站点时使用这些凭据完成认证流程。

示例代码:

const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch({
    credentials: {
      origins: ['https://your-ntlm-site.com'], // 目标站点的源地址
      credentials: [
        {
          origin: 'https://your-ntlm-site.com',
          username: 'your-username',
          password: 'your-password',
          domain: 'YOUR-DOMAIN' // 直接设置域信息
        }
      ]
    }
  });

  const page = await browser.newPage();
  await page.goto('https://your-ntlm-site.com');
  
  // 后续自动化操作...

  await browser.close();
})();

这个方案的优势是精准绑定目标站点,不会干扰其他站点的请求,完全符合NTLM认证的域要求。

方案2:将域与用户名拼接后传入page.authenticate()

不少NTLM服务器支持「域+反斜杠+用户名」的格式(比如DOMAIN\\username),这种情况下你可以直接用page.authenticate(),把拼接后的字符串作为username参数传入即可。

示例代码:

const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();

  await page.authenticate({
    username: 'YOUR-DOMAIN\\your-username', // 域与用户名拼接
    password: 'your-password'
  });

  await page.goto('https://your-ntlm-site.com');
  
  // 后续自动化操作...

  await browser.close();
})();

这个方案更简洁,但要注意不是所有NTLM服务器都兼容这种格式,建议先测试你的目标站点是否支持。

额外小提示

  • 若在无头模式下测试,确保Puppeteer与浏览器版本匹配,避免出现认证兼容问题;
  • 如果遇到认证失败,可以开启日志(launch({ dumpio: true })),查看请求中的认证流程细节,方便排查问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:15:28