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

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

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

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

selenium

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

Q&A

1回答

2223閲覧

Seleniumを使ってyourtubeの後から追加される動画を取得したいです。

hiro610

総合スコア12

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

selenium

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

0グッド

0クリップ

投稿2018/12/08 10:56

編集2018/12/08 11:08

###行いたいこと
個人のスクレイピングの練習としてyoutubeの動画取得を行っております。
最初はNokogiriで特定のチャンネルの動画を取得していたのですが、youtubeのスクロールした後に出てくる動画を
取得できないため、seleniumを使ってみました。

ただseleniumでもスクロール前までの動画しか取得できていない状態です。

考えていることとしては
seleniumでスクロール→表示されたコンテンツを取得→seleniumでスクロール→これらを繰り返し
スクロールできない状態まで繰り返すのかなと考えております。
具体的にどう記述すればよいかわからない状態です。

アドバイスいただけますと幸いです。

controller

1require 'selenium-webdriver' 2 3def show 4 driver = Selenium::WebDriver.for :chrome 5 driver.get 'https://www.youtube.com/channel/UCoFLB_Gw_AoxUuuzKjXrc_Q/videos' 6 7 # URL生成 8 url = "https://www.youtube.com/user/hstsunday/videos" 9 # オプションの生成(ヘッドレスブラウザで動作するように) 10 options = Selenium::WebDriver::Remote::Capabilities 11 options = options.chrome('chromeOptions' => { args: ['--headless'] }) 12 # ドライバーの起動 13 driver = Selenium::WebDriver.for :chrome, desired_capabilities: options 14 # URLへアクセス 15 driver.navigate.to(url) 16 17 18 #driver.find_elementsでxpathに該当する要素を取得(遅延ロードは含まれていない) 19 @video_titles = driver.find_elements(:xpath, "//a['video-title']") 20 21

試してみたコードは以下です。

controller

1 上記driver.navigate.to(url)の後ろに下記のコード追加 2 loop do 3 last_height = driver.execute_script("return document.body.scrollHeight") 4 5 driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") 6 7 @video_titles = driver.find_elements(:xpath, "//a['video-title']") 8 9 Selenium::WebDriver::Wait.new(timeout: 10) 10 11 new_height = driver.execute_script("return document.body.scrollHeight") 12 if new_height == last_height 13 break 14 end 15 last_height = new_height 16 end

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

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

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

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

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

guest

回答1

0

pyautoguiを利用して画面スクロールを実行すれば解决できるかと存じます。

https://pyautogui.readthedocs.io/en/latest/

投稿2019/12/12 13:53

john_doe_

総合スコア354

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問