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

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

ただいまの
回答率

90.51%

  • Ruby

    9400questions

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

  • selenium

    697questions

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

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

受付中

回答 0

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 123

hiro610

score 2

行いたいこと

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

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

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

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

require 'selenium-webdriver'

def show
     driver = Selenium::WebDriver.for :chrome
     driver.get 'https://www.youtube.com/channel/UCoFLB_Gw_AoxUuuzKjXrc_Q/videos'

    # URL生成
     url = "https://www.youtube.com/user/hstsunday/videos"
    # オプションの生成(ヘッドレスブラウザで動作するように)
     options = Selenium::WebDriver::Remote::Capabilities
     options = options.chrome('chromeOptions' => { args: ['--headless'] })
    # ドライバーの起動
     driver = Selenium::WebDriver.for :chrome, desired_capabilities: options
    # URLへアクセス
     driver.navigate.to(url)


   #driver.find_elementsでxpathに該当する要素を取得(遅延ロードは含まれていない)
     @video_titles = driver.find_elements(:xpath, "//a['video-title']")

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

   上記driver.navigate.to(url)の後ろに下記のコード追加
   loop do
    last_height = driver.execute_script("return document.body.scrollHeight")

      driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")

      @video_titles = driver.find_elements(:xpath, "//a['video-title']")

      Selenium::WebDriver::Wait.new(timeout: 10)

      new_height = driver.execute_script("return document.body.scrollHeight")
      if new_height == last_height
        break
      end
        last_height = new_height
    end
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

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

同じタグがついた質問を見る

  • Ruby

    9400questions

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

  • selenium

    697questions

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