久々にPuppeteerを使おうとしてプログラムを動かそうとしたらWarningで怒られました。
こんな感じで解消できます。
Node.js 21.2.0です。headless: 'new'
をつけて起動します。
const puppeteer = require('puppeteer');
// import puppeteer from 'puppeteer';
(async () => {
const browser = await puppeteer.launch({
headless: 'new',
});
const page = await browser.newPage();
await page.goto('https://developer.chrome.com/');
await browser.close();
}
)();
とりあえず解消したい方はここまででOKです。
Chromeのヘッドレスモードの仕様変更があるよ話
近々仕様が変わるから起動方法変えたコードにしておいた方が良いよ的な警告です。
Puppeteer old Headless deprecation warning:
In the near future `headless: true` will default to the new Headless mode
for Chrome instead of the old Headless implementation. For more
information, please see https://developer.chrome.com/articles/new-headless/.
Consider opting in early by passing `headless: "new"` to `puppeteer.launch()`
If you encounter any bugs, please report them to https://github.com/puppeteer/puppeteer/issues/new/choose.
DeepL翻訳だとこんな感じ
Puppeteerの古いヘッドレス非推奨の警告:
近い将来、`headless: true`のデフォルトはChrome用の新しいヘッドレスモードになります。
になります。詳しくは
https://developer.chrome.com/articles/new-headless/ を参照してください。
早めにオプトインすることを検討してください: puppeteer.launch()`に "new"`を渡すことで、早期にオプトインすることができます。
バグに遭遇した場合は、https://github.com/puppeteer/puppeteer/issues/new/choose。
Chromeのヘッドレスモードは元々通常モードと別だったぽい
こちらのChrome公式ブログに解説が書いてましたが、以前はGooge Chromeのヘッドレスモードと通常モード(ヘッドフルモード)は別々に作られてた模様です。
Chrome v112から 新しいヘッドレスモードが使えるようになって、しばらくは後方互換もあるので両方使えるようにしてくれてる模様です。
現状は古いヘッドレスモードを使う時はchrome --headless=old
、新しいものを使う時はchrome --headless=new
のフラグをつけて使い分けできるようです。
という感じでPuppeteerから起動する際も、明示的に古いモードを使いたいって話ではなければ以下のように
const browser = await puppeteer.launch({
headless: 'new',
});
と指定しましょうという話でした。
結局嬉しいのか
通常利用のChromeとヘッドレスモードもChromeで少し挙動が異なるといった場合が使い込んでいくとあったのですが、その辺が解消された(解消されやすくなった)感じだと思います。
古いモードで作ってた処理もそのうちアップデートしたいですね。