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

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

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

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

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

Python

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

selenium

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

Q&A

0回答

1809閲覧

python スクレイピングで埋め込まれた小窓の自動スクロールがしたい

sleepingisdrago

総合スコア2

スクレイピング

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

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

Python

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

selenium

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

0グッド

0クリップ

投稿2021/12/22 08:09

前提・実現したいこと

ここに質問の内容を詳しく書いてください。
pythonで楽天ROOMというSNSサイトのフォローを自動化しようと考えています。
seleniumを用いて大方うまくいっているのですが、1点だけどうしても解決できない問題が出ています。

いいねを自動化するにあたり、ページを一定のWEBページの高さ分スクロールする必要があるのですが、自動スクロールがうまくいきません。
というのも、WEBページ全体のスクロールであればwindow.scrollToで対応できるのですが、別途ページ内に埋込みされたミニスクロールバーをスクロールしたいため、狙ったスクレイピング操作ができない状況です。

方法をご存知の方、
大変お手数をおかけいたしますが、ご教示いただければ幸いです。

発生している問題・エラーメッセージ

ページ内に埋込みされたミニスクロールバーの自動スクロール実装方法がわからない。 ![該当ページ埋込スクロールバー](52703b9dfbd86ddc03d7a0a88ae4e98a.png)

該当のソースコード

python

1import time 2from selenium import webdriver 3from selenium.webdriver.common.keys import Keys 4from selenium.webdriver.common.by import By 5from selenium.common.exceptions import TimeoutException 6from selenium.webdriver.support.ui import WebDriverWait 7from selenium.webdriver.support import expected_conditions as EC 8from itertools import product 9import random 10 11# 楽天ROOMへのログイン等情報 12userid='****' 13userpw='****' 14room_editor='https://room.rakuten.co.jp/room_jp/followers' 15 16 17# 楽天ROOMへログインして開く関数 18def roomin(): 19 driver.get('https://grp03.id.rakuten.co.jp/rms/nid/login?service_id=r13&return_url=/common/idafterlogin&scid=feed_collection_login_signup') 20 # 3秒待つ 21 time.sleep(3) 22 # ログインIdとパスワードの入力領域を取得します。 23 login_id = driver.find_element_by_xpath("//*[@id='loginInner_u']") 24 login_pw = driver.find_element_by_xpath("//*[@id='loginInner_p']") 25 # ログインIDとパスワードを入力します。 26 login_id.send_keys(userid) 27 login_pw.send_keys(userpw) 28 # ログインボタンをクリックします。 29 login_btn = driver.find_element_by_xpath("//*[@id='loginInner']/p[1]/input") 30 login_btn.click() 31 # 5秒待つ 32 time.sleep(5) 33 34# スクロールする関数 35def scroll(): 36 37 # JSで自動スクロールを実施 38 height = 400 39 40 while height < 20000: 41 42 driver.execute_script(f'document.getElementByClassName("body list notice ng-isolate-scope").scrollTo(0,{height});') 43 height += 400 44 45 time.sleep(5) 46 47 time.sleep(5) 48 49def auto_follow(): 50 51 unfollowers_list = driver.find_elements_by_class_name('follow icon-follow') 52 53 for unfollower in unfollowers_list: 54 unfollower.click() 55 time.sleep(random.uniform(int(interval*0.7),int(interval*1.2))) 56 57if __name__ =='__main__': 58 # import時にその関数が自動実行しないようにした枕詞 59 # ブラウザを開く。 60 driver = webdriver.Chrome(executable_path='G:/python/MyPython/chromedriver.exe') 61 62 # 楽天ROOMログイン関数実行 63 roomin() 64 time.sleep(3) 65 66 # 「ROOM編集部のフォロワー」のページへ飛ぶ 67 driver.get(room_editor) 68 69 # ページ上のすべての要素が読み込まれるまで待機 70 driver.implicitly_wait(10) 71 72 # 自動スクロール 73 scroll() 74 time.sleep(3) 75 76 # 自動フォロー実行 77 auto_follow() 78 79 #終了 80 driver.quit 81

試したこと

window.scrollTo(0,{height}); は、WEBページ全体に対するスクロールなので、今回の趣旨に合いませんでした。
なお、window.scrollToのみ変更したスクリプトを別のページで試したところ、自動スクロールが正常に実行されました。
なので、以下の部分の修正が必要なとこrまでは絞っています。
が、方法が調べても一向にわかりません。。。

driver.execute_script(f'document.getElementByClassName("body list notice ng-isolate-scope").scrollTo(0,{height});')

補足情報(FW/ツールのバージョンなど)

conda version : 4.10.3
python version : 3.8.8.final.0
OS:Windows8
VSCode使用

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問