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

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

新規登録して質問してみよう
ただいま回答率
85.50%
スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

スクロール

スクロールとは、ディスプレイスクリーン上において連続的にコンテンツが滑っていくことを指します。

Python

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

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

Q&A

1回答

1087閲覧

python seleniumでページ内の特定要素を無限スクロールさせたいが、ページをスクロールしてしまいます。特定の要素のスクロールは不可能なのでしょうか?

growthhackoji3

総合スコア5

スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

スクロール

スクロールとは、ディスプレイスクリーン上において連続的にコンテンツが滑っていくことを指します。

Python

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

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

0グッド

0クリップ

投稿2019/11/03 10:09

編集2022/01/12 10:55

やりたいこと

seleniumを使ったスクレイピングで、ボタンを押すとポップアップウィンドウ(新しいウィンドウではない)がページ内に表示され、ページ全体ではなく、そのポップアップしてきた要素の中身をスクロールして読み込んだうえでデータを取得したい状況です。

現状スタックしている個所

ページ内の特定要素を無限スクロールさせたいが、ページをスクロールしてしまいます。特定の要素のスクロールは不可能なのでしょうか?

こちら、エラーは出ておりません

#IDを引き抜く USERID_PATH = '/html/body/div[3]/div[2]/div/article/header/div[2]/div[1]/div[1]/h2' NUM_LIKED_PATH = 'body > div._2dDPU.vCf6V > div.zZYga > div > article > div.eo2As > section.EDfFK.ygqzn > div > div.Nm9Fw > button' POST_DATE_PATH = '/html/body/div[3]/div[2]/div/article/div[2]/div[2]/a/time' CLOSE_WINDOW_PATH = '/html/body/div[4]/div/div[1]/div/div[2]/button' #user_ids = [] #likeds =[] #postsURL = [] #postsDATE = [] userCounter = 0 userMAX = 5 df = pd.DataFrame({'user_id':[], 'URL':[]}) while userCounter < userMAX: #いいね数クリック time.sleep(random.randint(2,6)) driver.find_element_by_css_selector(NUM_LIKED_PATH).click() time.sleep(random.randint(2,6)) #scrollして全部読み込む for i in range (1, 10): driver.execute_script('document.querySelector("body > div.RnEpo.Yx5HN > div > div.Igw0E.IwRSH.eGOV_.vwCYk.i0EQd").scrollTo(0, document.querySelector("body > div.RnEpo.Yx5HN > div > div.Igw0E.IwRSH.eGOV_.vwCYk.i0EQd").scrollHeight);') time.sleep(2) #useridの取得 user_ids = driver.find_elements_by_css_selector('div._7UhW9.xLCgt.qyrsm.KV-D4.fDxYl.rWtOq > div.Igw0E.rBNOH.eGOV_.ybXk5._4EzTm') for liker in user_ids: postURL = driver.current_url user_id = liker.text series = pd.Series([user_id, postURL],['user_id', 'URL']) print(user_id, postURL) df = df.append(series, ignore_index=True) try: time.sleep(5) #ばってんおす close_window = driver.find_element_by_xpath(CLOSE_WINDOW_PATH) #次の投稿に行く round_page = driver.find_element_by_css_selector(NEXT_PAGE_SELECTOR) except NoSuchElementException: # 次のページへボタンが押せない、つまり最後のページまで読み切った break time.sleep(random.randint(3,8)) close_window.click() time.sleep(random.randint(3,8)) round_page.click() userCounter += 1 time.sleep(random.randint(3,8))

お力添えよろしくお願いいたします。

類似の質問がありましたが解決されておりませんでした。

https://teratail.com/questions/192015?fbclid=IwAR3BcaDpmndlgDj7INfqnDDWXpbnIDxK24Pqjq1IKKzHWsIyfElhw-3o3dY

※追記

スクロールの個所をこちらで試したところ、「element not interactable」のエラーが出てしまいます。

#scrollして全部読み込む element_inside_popup = driver.find_element_by_css_selector('body > div.RnEpo.Yx5HN > div > div.Igw0E.IwRSH.eGOV_.vwCYk.i0EQd > div > div') element_inside_popup.send_keys(Keys.END) time.sleep(2)

環境

windows 10
python 3.7
selenium

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

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

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

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

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

guest

回答1

0

ポップアップしてきた要素の中身をスクロールして読み込んだうえでデータを取得したい

だとしたらスクロールは不要です。
DOMをみないとプログラムはかけないですが、
for文をまわせば全て取得できると思います。

投稿2019/11/04 05:59

shirai

総合スコア1289

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問