0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【puppeteer】ログイン認証が必要なWebサイトで手動でログインだけした後に自動でブラウザ操作してスクレイピングする

Posted at

背景

タイトルの通り。
以前、ダルいブラウザ操作を自動化しようと思ってスクレイピングに手を出すも、ログイン認証が必要なWebアプリケーションはURLにアクセスしてもログイン画面に飛ばされてしまうため「スクレイピングしょーもな」となっていた。
(本目的でない且つ一度しか出ないログイン画面の操作を自動化するのは面倒くさい。つーか単純操作を手抜きする精神で始めたような人間がスクレイピングの細かい部分まで学習するわけねーだろ)

最近、ログインだけ手動で行って、ログイン済みのcookieを保存しておき、それを読み込めばログイン操作無しでスクレイピングできることを知ったので備忘として残しておく。

やりかた

ログインしてcookieを保存する処理とメインのスクレイピングの2つを作る。

Node.jsが好きなのでPuppeteerというライブラリを使ってスクレイピングを行う。
手法自体は他のライブラリにも使いまわせると思う。

1.cookieの保存

setTimeoutで待機している間に手動でログイン操作するという、ただそれだけのこと。

cookie.js
const fs = require('node:fs');
const puppeteer = require('puppeteer');

// メニュー画面のURLを指定してもログインしていないとログイン画面にリダイレクトされる的なサイト
const url = 'https://example.com/menu';

(async () => {
  // GUI表示したいのでヘッドレスモードをオフにする
  const browser = await puppeteer.launch({ headless: false });
  const page = await browser.newPage();

  // 目的のサイトに移動してもログイン画面にリダイレクトされる想定
  await page.goto(url);

  // 任意の時間を指定して手動でログインを済ませる(後々ここを自動化しても良い)
  await new Promise(resolve => setTimeout(resolve, 60000));

  // cokkieを取得してファイルとして保存する
  const cookies = await page.cookies();
  fs.writeFileSync('cookies.json', JSON.stringify(cookies));

  // ブラウザを閉じる
  await browser.close();
})();

2.保存したcookieを読み込んでスクレイピングする

cookieを読み込んでやりたいスクレイピングをやるだけ

scraping.js
const fs = require('node:fs');
const puppeteer = require('puppeteer');

// メニュー画面のURLを指定してもログインしていないとログイン画面にリダイレクトされる的なサイト
const url = 'https://example.com/menu';

(async () => {
  const browser = await puppeteer.launch({ headless: false });
  const page = await browser.newPage();

  // 1.で保存したcookieを読み込む(期限切れ注意)
  const cookies = JSON.parse(fs.readFileSync('cookies.json'));
  await page.setCookie(...cookies);

  // 目的のサイトのログイン後の画面が表示されるはず
  await page.goto(url);

  // 任意の自動操作(例: 特定のクラス名のボタンクリック)
  await page.click('.search-btn');

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

まとめ

細かいことはいいからさっさとWebスクレイピングしたい人向け。
手動ログイン操作部分を自動化したり、2つの処理をまとめたり、工夫の余地はあると思います

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?