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?

RurucunSoloAdvent Calendar 2024

Day 1

Playwrightに軽く入門してみる

Posted at

ローカルでスクレイピングをしたい場面が出てきたので、Playwrightに入門しつつローカル上でWebサイトへアクセスする処理を試してみます。

インストールしテストを試す

新しくディレクトリを作り、そこでnpm initでインストールします。

mkdir scrap
cd scrap
npm init playwright@latest

下記のようなディレクトリ構成が作成されます。

playwright.config.ts
package.json
package-lock.json
tests/
  example.spec.ts
tests-examples/
  demo-todo-app.spec.ts

表示通り、下記を実行するとテストがヘッドレスで実行されます。

npx playwright test 

show-reportコマンドを叩くことで、結果をブラウザ上にUIで表示できます。

npx playwright show-report
リスト 詳細画面
image.png image.png

スクレイピングしてみる

今回はスクレイピングしたいので、playwrightを別途インストールします。

npm i playwright

下記のようなjavascriptファイルを作成します。
ページを開き、タイトルの取得、スクリーンショットの保存までを行っています。

import { chromium } from 'playwright'; 

(async () => {
  let browser = null;
  let page = null;

  try {
    // ヘッドレスモードをオフにしてブラウザを起動
    browser = await chromium.launch({
      headless: false, // ヘッドレスモードをオフ
    });

    const context = await browser.newContext(); 
    page = await context.newPage();

    // 指定したURLを開く
    await page.goto('https://example.com');
    console.log('ページが開かれました!');

    // サンプル操作: ページタイトルを取得して表示
    const title = await page.title();
    console.log(`ページタイトル: ${title}`);

    // サンプル操作: スクリーンショットを撮る
    await page.screenshot({ path: 'example.png' });
    console.log('スクリーンショットが保存されました!');

    // 必要に応じて、ページ内の要素を操作する
    // 例: 特定のボタンをクリック
    // await page.click('text="More information..."');

  } catch (error) {
    console.error('エラーが発生しました:', error);
  } finally {
    // ブラウザを閉じる
    if (browser) {
      await browser.close();
    }
  }
})();

launchでヘッドレスモードをオフにすることで、実際にブラウザが起動し、スクリーンショットを取得する処理を行っています。
処理が一瞬なので、ブラウザの表示は一瞬です。
3秒待つなどの処理を入れるとわかりやすいです。

browser = await chromium.launch({
  headless: false, // ヘッドレスモードをオフ
});

普段使っているChromeのProfileを使ってみる

chromium.launchをlaunchPersistentContextにし、プロファイルとChromeのパスを渡します。

パスの場所は、chrome://version/へブラウザからアクセスすることで取得できます。

注意点として、useDataDirは親ディレクトリを選ぶ必要があります。


    // プロファイルと実行可能ファイルのパスを指定
    const userDataDir = '/Users/name/Library/Application Support/Google/Chrome/';
    const executablePath = '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome';

    // ヘッドレスモードをオフにしてブラウザを起動
    context = await chromium.launchPersistentContext(userDataDir, {
      headless: false,
      executablePath: executablePath,
    });

この状態で node index.jsを叩くことで、普段使っているユーザープロフィールでブラウザ操作ができるはずです。

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?