
Playwrightを使ってNotebookLMへのURL追加を自動化してみた
こんにちは。たかやまです。
みなさんNotebookLMを使っていますか?
NotebookLMはGoogleが提供するAI リサーチ アシスタントで、ドキュメントやWebページなどの「ソース」を追加することで、そのソースに基づいた正確な回答を得ることができます。
普段から情報を調べる際にChatGPTやClaudeなどのLLMを活用していますが、LLMは質問に対して誤った情報を返すハルシネーションが発生するリスクがあります。
また、PerplexityなどのAI検索エンジンを使うことで正確性の高い情報を得ることができますが、ソースもとが多岐にわたるケースがあり、その中から必要な情報を見つけるのが難しいこともあります。
AWSに関する情報を調べる場合、AWSドキュメントを1次ソースにしたいケースがあります。そこで、提供ソースに基づいて回答を返すNotebookLMにAWSのドキュメントをインポートして使ってみたいと思いました。
ただ、NotebookLMは現在APIを提供しておらず、基本的にはWebブラウザからの操作が必要です。
今回はWeb操作を自動化するツールPlaywrightを活用してAWSのドキュメントをNotebookLMに一括登録する方法を紹介します。
さきにまとめ
- NotebookLMは1ソース上限500,000語で最大300のソースを追加できる
- PlaywrightはMCPも提供されているが追加に時間がかるので、スクリプトで実行するのが無難
- スクリプトで300件ソースを追加するのにだいだい15分ぐらいかかる
NotebookLMの基本情報
NotebookLMはGoogleが提供する知識特化型のLLMサービスです。特定のドキュメントやウェブページ、PDFなどを「ソース」として追加することで、それらの情報に基づいた回答を得ることができます。
ひとつのノートブックに追加できるソースの上限は300となっています。
また各ソースの上限は 500,000語になります。
AWSドキュメントはドキュメントの全量をPDFでダウンロードすることができますが、こちらのPDFはゆうに500,000語を超えるのでNotebookLMで利用する場合にはこれから紹介するような方法で各ページのURLを追加するのがよさそうです。
やってみる
各スクリプトのコードはGitHubで公開しています。
AWSドキュメントのリンクを抽出する
まずは、NotebookLMに追加するためのAWSドキュメントのリンクを抽出します。
NotebookLMに追加するリンクはAWSドキュメントのナビゲーションパネルから抽出していきます。
AWSドキュメントのリンクは以下のスクリプトで抽出していきます。
このスクリプトはPlaywrightとBeautifulSoupを使用して、AWSドキュメントのナビゲーションパネルからリンクを抽出しています。
Playwrightはブラウザの自動操作ツールで、JavaScriptで動的に生成されるコンテンツを含むページも適切に処理することができます。
スクリプトの実行は以下の通りです。
# 必要なライブラリのインストール
pip3 install -r requirements.txt
# スクリプトの実行
python aws_doc_link_scraper.py --url "https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts.html" --output "aws_links.txt"
引数の説明は以下の通りです。
--url
: 抽出するAWSドキュメントページのURL(必須)--output
: 結果を保存するファイル名(省略可、デフォルトは「aws_links.txt」)
実行すると、以下のようにリンクの一覧が保存されます。
$ python3 aws_doc_link_scraper.py --url https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts.html
Playwrightを使用してHTMLを取得しています...
ページにアクセス中: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts.html
ページが完全にロードされました
HTMLの取得が完了しました
BeautifulSoupでHTMLを解析しています...
ナビゲーションメニューからリンクを抽出しています...
合計 649 個のリンクが見つかりました
1. What is Amazon EC2?: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts.html
2. Get started tutorial: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EC2_GetStarted.html
3. Best practices: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-best-practices.html
...(省略)...
処理が完了しました。結果は /path/to/aws_links.txt に保存されました。
出力した内容は以下のようになります。
1. https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts.html
2. https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EC2_GetStarted.html
3. https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-best-practices.html
4. https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AMIs.html
5. https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ComponentsAMIs.html
...(省略)...
646. https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/disconnect-serial-console-session.html
647. https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/troubleshoot-using-serial-console.html
648. https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/diagnostic-interrupt.html
649. https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/DocumentHistory.html
全量で649件のURLが抽出されました。なかなかの量ですね
NotebookLMは300件が上限のため全量を追加することができないので気になる部分の章を追加するか前半後半のような形でノートブックをわけて管理するのがよさそうですね
(後述しますが、スクリプトの引数で追加するURLを指定することも可能です)
次に、抽出したURLをNotebookLMに追加します。
ドキュメントリンクをNotebookLMに追加する
以下のスクリプトでドキュメントリンクをNotebookLMに追加します。
# 必要なライブラリのインストール
pip3 install -r requirements.txt
# スクリプトの実行
python notebook_lm_uploader.py --url "https://notebooklm.google.com/notebook/YOUR_NOTEBOOK_ID" --file "aws_links.txt"
引数の説明:
--url
: NotebookLMのノートブックURL(必須)--file
: URLリストが含まれるファイルのパス(デフォルト: aws_links.txt)--start
: 追加するURLの開始番号(省略可)--end
: 追加するURLの終了番号(省略可)
スクリプトを実行すると、ブラウザが自動で起動し、指定したURLのドキュメントをNotebookLMに追加していきます。
以下のような表示が出たらGoogle認証が必要なので手動でログインを行います。
$ python3 notebook_lm_uploader.py --url https://notebooklm.google.com/notebook/YOUR_NOTEBOOK_ID
xxx個のURLが抽出されました。
Playwrightを起動しています...
NotebookLM (https://notebooklm.google.com/notebook/YOUR_NOTEBOOK_ID) にアクセスしています...
アクセス完了
Googleアカウントでのログインが必要な場合は、手動でログインしてください...
ログイン後に処理を続行します(最大120秒待機)
NotebookLMのインターフェースを待機しています...
ログイン完了後、以下のように自動でURL追加が始まります。
実際に300ソースをNotebookLMに追加してみたところ、約15分ぐらいかかりました。
ソース追加は全量だけでなく、オプション--start 51 --end 100
のように指定することで途中のURLのみを追加することも可能です。
# 例:51番目から100番目までのURLを追加
python notebook_lm_uploader.py --url "https://notebooklm.google.com/notebook/YOUR_NOTEBOOK_ID" --file "aws_links.txt" --start 51 --end 100
今回のEC2ドキュメントのように、ドキュメントリンクが多い場合にはこちらのオプションなどを活用して気になる章の部分を追加いただければと思います。
また、今回はAWSドキュメントを例にしましたが、指定ファイルに 項番. URL
のように列挙いただくことで、AWSドキュメント以外のドキュメントを追加することも可能なのでNotebookLMへのソース追加として活用いただければと思います。
1. https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts.html
2. https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EC2_GetStarted.html
3. https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-best-practices.html
4. https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AMIs.html
...
追加したAWSドキュメントをNotebookLMで眺めてみる
NotebookLMに300件上限でソースを追加すると以下のようなメッセージが表示されます。
EC2インスタンスタイプについて質問したところ、ちゃんとソース付きで回答が返ってきていますね。
また3月に発表されたマインドマップ機能を利用することで、EC2の全体像をマインドマップで把握することができます。
マインドマップ内で気になる言葉があれば選択することで、さらに深堀りすることも可能です。
また質問のプリセットも用意されています。こちらを選択することで、「よくある質問」の生成だったり「学習ガイド」として EC2 に関する問題を作成してくれます。
AWSドキュメントを読み込む場合のアシスタントツールとして活用できそうですね。
(付録)Playwright MCPを使ってドキュメントリンクをNotebookLMに追加する
最近ではPlaywrightもMCPの提供が開始されています。
まとめにも書いてあるとおり、スクリプトで実行したほうが実用的ですが、せっかくなので今回の処理をPlaywright MCPを使って自動化したケースも紹介します。
私は普段Cursorを使っているので、CursorのMCP Serversに以下を登録していきます。
{
"mcpServers": {
"playwright": {
"command": "npx",
"args": ["@playwright/mcp@latest", "--vision"]
}
}
}
PlaywrightがEnabledになっていることを確認します。
MCP Serverが有効になっている状態で以下のプロンプトを実行すると、Playwrightが起動します。
以下のページにアクセスしてください。
@https://notebooklm.google.com/notebook/YOUR_NOTEBOOK_ID
ログインが求められたら、立ち上がったブラウザ上でログインを実施します。
ログイン完了後、URLを追加するように以下のプロンプトを実行します。
@aws_links.txt に含まれる各URLに対して、以下の操作を順番に実行してください。エラーが発生した場合は、そのエラー内容を報告し、可能であれば次のURLに進んでください。
## 操作手順
1. 左上にある「+」アイコン付きの「ソースを追加」ボタンをクリックします
2. 表示されるダイアログから「ウェブサイト」オプションを選択します
3. URLフィールドに @aws_links.txt からURLを貼り付けます
4. 「挿入」ボタンをクリックして確定します
5. 上記の手順1〜4を、@aws_links.txt の全URLに対して繰り返します。
プロンプトを実行すると以下のようにPlaywrightが画面を認識して、プロンプトに従って操作を実行します。
「画像認識」 -> 「画面操作」 流れになるので、見ていただくと分かる通りスクリプトで実行するのに比べて動作のもっさり感は否めませんね。
また、Cursorではツールの呼び出しを25回行うと停止してしまうため、大量のURLを追加する場合には複数回実行する必要がありそうです。
(1回の追加に時間がかかるので大量のURLの追加は現実的ではなさそう)
作業の効率化の観点では、まだまだMCPでの利用は効率的ではないと感じましたが、一方で画像認識して操作を学習するため、一度操作をさせてコードを生成させるような使い方には活用できそうです。
(テキスト要素での操作を行うコードになるので汎用性の観点では考慮が必要そう)
最後に
今回はPlaywrightを使ってNotebookLMへのURL追加を自動化してみました。
NotebookLMはソースに基づいた正確な情報を得るサービスとして非常に有用です。
技術ドキュメントなどとっかりにくいけど、1次ソースをもとにわかりやすくドキュメントを理解したいといった場合にはこういったツールを積極的に活用していきたいですね。
また、最近のMCPブームに乗じてNotebookLM自体にもAPI提供やMCPへの対応を期待したいですね
以上、たかやま(@nyan_kotaroo)でした。