やりたいこと
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))
お力添えよろしくお願いいたします。
類似の質問がありましたが解決されておりませんでした。
※追記
スクロールの個所をこちらで試したところ、「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
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。