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

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

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

Beautiful Soupは、Pythonのライブラリの一つ。スクレイピングに特化しています。HTMLデータの構文の解析を行うために、HTMLタグ/CSSのセレクタで抽出する部分を指定することが可能です。

JavaScript

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

1545閲覧

pythonで要素を.click()した後に読み込まれるjavascriptの内容を取得したい

masarotu

総合スコア4

Beautiful Soup

Beautiful Soupは、Pythonのライブラリの一つ。スクレイピングに特化しています。HTMLデータの構文の解析を行うために、HTMLタグ/CSSのセレクタで抽出する部分を指定することが可能です。

JavaScript

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

1クリップ

投稿2020/01/22 14:54

前提・実現したいこと

pythonでwebサイトに記載されているURLを抽出するシステムを作っていますが、一部の要素が取り込めず頭を抱えています。
具体的には

webサイトを開く

id要素をクリック(javascriptでURLが記載された要素が読み込まれる)

javascriptで読み込まれた要素からURLを抽出

ということをしたいのですが、javascriptで読み込まれた要素そのものが抽出できません。

該当のソースコード

driver.get(https://~) driver.find_element_by_css_selector('#id').click() #id要素をクリックするとjavascriptで要素が読み込まれる html = driver.page_source soup = bs4.BeautifulSoup(html, "html.parser") #soup内にjavascriptで読み込まれた要素が存在しない

試したこと

一番解決に近そうなのはこちらですが、うまくいきませんでした。
https://qiita.com/Azunyan1111/items/b161b998790b1db2ff7a
JavaScriptによる描画に対応する

こちらのサイトはページにアクセスしてから必要な情報が描画される場合であり、ページを読み込んだ後クリックにより必要な情報が描画されるのとは異なるからです。

.click()をした後にdriverにページ情報を再取得させればいいのかな、と思うのですが解決方法が浮かびません。
詳しい方、ご教示いただければと存じます。

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

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

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

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

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

frederick_1974

2020/01/23 00:26

可能性を確認するための質問なのですが、 ・「html = driver.page_source」を実行しているのは、JavaScriptによる読み込みが完了するための時間を確保してからの実行なのでしょうか。 ・取得したhtmlがiframeで分割されているということはないでしょうか?
dameo

2020/01/23 01:35

とりあえずタグにseleniumを入れてください。 seleniumは主に自動テストを目的にchromeなどのブラウザを制御できるソフトです。 なので、実際にブラウザの画面でHTML要素を確認してください。 自分でブラウザで確認した内容と、selemium経由で取得したHTMLとの差異を検証すればどういう状況なのか分かりませんか? 個々のHTML要素が分からない場合は、ちゃんと自分で解析した上で不明点のみを聞いてください。HTML要素の内容を最低でも8割以上理解してから質問しましょう。可能ならHTMLもJavaScriptも質問するところ以外は全て理解してからが理想です。
masarotu

2020/01/23 02:39

frederick_1974様 下記の様にtime.sleepで十分な読み込みの時間を持たせ、HTML表示が切り替わった事を確認し、取得をしているのですが状況は変わりませんでした。 driver.find_element_by_css_selector('#id').click() time.sleep(10) html = driver.page_source dameo様 HTMLを解析した上での質問です。 わからないなら関わらないでください。 通報しました。
frederick_1974

2020/01/23 02:46

iframeの件はいかがですが? 読み込んでいるページがAとして、そのページがフレームBとCなどに分割されており、JavaScriptがフレームBまたはCにデータ等を読み込ませた場合、そのままではpage_sourceには表示されないのですが。
dameo

2020/01/23 02:50

HTMLを解析しているのであれば、解析した結果を提示してください。 何が阻害要因なのかはJavaScriptである可能性が高いとはいえ、HTMLの差異とJavaScript自体が提示されない以上、判断できません。 seleniumの話であるにも関わらず、タグの追加すらしないで通報とか何をしたいのか分かりませんが、他の方にお任せしますね。頑張ってください。
masarotu

2020/01/23 08:57

frederick_1974様 >iframeの件はいかがですが? 失礼しました、見落としていました。 どうもiframeで読み込まれている可能性がありそうです!ちょっと調べてみます。 dameo 関わらないでください。
guest

回答1

0

beautifulsoupはhtmlを解析するためのライブラリなので,プログラムからブラウザを操作するならseleniumを使うと良いと思います.
参考

投稿2020/03/20 11:29

dark-eater-kei

総合スコア1248

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問