前提・実現したいこと
ここに質問の内容を詳しく書いてください。
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使用
あなたの回答
tips
プレビュー