これはなに?
以前 await puppeteer.launch()
のオプションでUserAgentを指定できたような気がしたが出来なかったので改めて調査してみた。
手元に昔書いたこんな風のコードあったけど初めから期待した挙動してなかったんかな……
const browser = await puppeteer.launch({
headless:true,
executablePath: "/usr/bin/google-chrome",
ua: "foobar",
});
どうするの?
ブラウザの起動オプションに与える
const browser = await puppeteer.launch({
headless:true,
slowMo: 10,
executablePath: "/usr/bin/google-chrome",
args: [
"--user-agent=Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36",
],
});
argsがブラウザ起動時のコマンドラインオプションになるはずなのでこれで指定する
素直にsetUserAgent()を使う
const page = await browser.newPage();
page.setUserAgent("Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36");
Puppeteer使うならこれが正攻法なんでしょうね。
結果
checkua.js
const puppeteer = require("puppeteer");
(async() => {
const browser = await puppeteer.launch({
headless:true,
slowMo: 10,
executablePath: "/usr/bin/google-chrome",
args: [
// "--user-agent=Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36",
],
});
const page = await browser.newPage();
// page.setUserAgent("Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36");
try {
const value = await page.evaluate(() => {
return navigator.userAgent;
});
console.log(value);
} catch(e) {
console.log(e);
}
browser.close();
})();
$ node checkua.js
Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/97.0.4692.99 Safari/537.36
argsの方のコメントアウト部分を有効にすると
$ node checkua.js
Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36
デフォルトでHeadlessChromeとなっていた箇所がChromeとなり、上書きされていることが確認できる。
setUserAgentの方のコメントアウト部分を有効にすると
$ node checkua.js
Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36
こちらも書き換えられている。
昔書いたスクリプト直さなきゃだ!
それでは良いWebスクレイピングライフを。