質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Chrome extension

Chrome拡張機能

Q&A

0回答

2063閲覧

Chrome拡張で遷移後のHTMLを取得したい

hiro25

総合スコア16

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Chrome extension

Chrome拡張機能

0グッド

1クリップ

投稿2020/09/17 07:17

Google Chromeの拡張機能を使って、スクレイピングをしたいと考えています。
今やろうとしているのは、Google検索結果のタイトルを3ページ分取得したいです。

困っているのは、1ページ目を表示されている状態で、拡張機能を実行し、
1ページ目のタイトルは取得できるのですが、「次へ」をクリックして表示される
2ページ目のタイトルが取得できずに困っています。
ご回答をお待ちしております。
※具体的なサンプル例でのご回答を希望。

###フォルダ構成 [myscraper]

1階層2階層3階層
[foreground]
[js]
main.js
popup.html
doScraping.js
manifest.json

###manifest.json

json

1{ 2 "name": "My Scraper", 3 "description": "scraping test", 4 "version": "0.0.1", 5 "manifest_version": 2, 6 "browser_action": { 7 "default_popup": "foreground/popup.html" 8 }, 9 "content_scripts": [{ 10 "matches": ["http://www.google.co.jp/*", "https://www.google.co.jp/*"], 11 "js": ["doScraping.js"], 12 "run_at": "document_end" 13 }], 14 "permissions": [ 15 "tabs" 16 ] 17}

###doScraping.js

js

1chrome.runtime.onMessage.addListener(function(msg, sender, sendResponse) { 2 var result = "<ul>"; 3 var el_titles = document.querySelectorAll("div > div.r > a:nth-child(1) > h3"); 4 5 for(var i = 0; i < el_titles.length; i++){ 6 result += "<li>" + el_titles[i].innerHTML + "</li>"; 7 } 8 9 //2ページ目を取得するため「次へ」をクリック 10 document.querySelector("#pnnext").click(); 11 12 el_titles = document.querySelectorAll("div > div.r > a:nth-child(1) > h3"); 13 14 for(var i = 0; i < el_titles.length; i++){ 15 result += "<li>" + el_titles[i].innerHTML + "</li>"; 16 } 17 18 result += "</ul>"; 19 sendResponse(result); 20 return true; 21});

###popup.html

html

1<!doctype html> 2<html lang="en"> 3<head> 4 <meta charset="UTF-8"> 5 <title>Document</title> 6</head> 7<body> 8<button id="ChromePlugin-doScrape">GET</button> 9<div class="result-wrapper" style="width: 300px;"> 10 <h3>RESULT</h3> 11 <div id="ChromePlugin-result-disp"></div> 12</div> 13 14<script src="js/main.js"></script> 15 16</body> 17</html>

###main.js

js

1document.addEventListener("DOMContentLoaded", function() { 2 document.getElementById("ChromePlugin-doScrape").addEventListener("click", function(){ 3 4 chrome.tabs.query({active: true, currentWindow: true}, function(tabs) { 5 chrome.tabs.sendMessage(tabs[0].id, {}, 6 function(msg) { 7 document.getElementById("ChromePlugin-result-disp").innerHTML = msg; 8 }); 9 }); 10 11 }); 12});

###使い方
0. Chrome拡張機能をデベロッパーモードで有効にする。
0. Google検索画面を表示して、google検索を実行する。
0. 有効にした拡張機能を実行すると表示される「GET」ボタンを押下する。

すると、タイトルの一覧が表示される。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kuma_kuma_

2020/09/19 00:53

Google Chromeの拡張機能ってURL一つに限定されてない? (推移さるまではできるが処理は引き継げない 移った先で新たに拡張機能の処理が動く) たしかセキュリティ上もそうなっていたはず。 別に考えればページ毎に拡張機能が立ち上がることで各自の処理に影響を受けないって事 データだけならがローカルに残す方法で引き継げたはずだけど iframeもクロスドメインで引っかかりそうだし... 処理手順 (URLで処理判定) 1.拡張機能をGoogle検索画面で実行すると自動で検索キーで実行 2.検索結果で拡張機能を実行するとリストを取得してコピペに変換しておく 次のページに移動 3. 2と同じ動作を繰り返す かな?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問