開始時間を指定して録画する。等倍なのがよくない。
認証用にselenium-webdriverを利用。ログから探したいのでchromedriverを使う。
手順
起動
require 'selenium-webdriver' log_prefs = { "performance" => "ALL" } caps = Selenium::WebDriver::Remote::Capabilities.chrome("loggingPrefs" => log_prefs) driver = Selenium::WebDriver.for :chrome, desired_capabilities: caps # タイムアウトの時間設定 driver.manage.timeouts.page_load = 30
これでログが確認できるらしい。何をやっているかは調べてない。
ログイン
省略
再生
# ページのurl live_url = "?????" # ページにアクセス driver.get(live_url) # 設定ボタン setting_button = driver.find_element(:xpath, "//button[contains(@class, 'setting-button')]") # 設定が閉じていたら開く if setting_button.attribute("aria-pressed") == "false" driver.action.move_to(setting_button).click().perform() end # 画質を選択する video_quality_select_box = Selenium::WebDriver::Support::Select.new(driver.find_element(:xpath, "//select[contains(@name, 'videoQualitySelectBox')]")) video_quality_select_box.select_by(:index, 1) # 設定が開いていたら閉じる puts setting_button.attribute("aria-pressed") if setting_button.attribute("aria-pressed") == "true" driver.action.move_to(setting_button).click().perform() end # ここまでのログを処理しておく driver.manage.logs.get(:performance) # 再生位置を指定 time_text_box = driver.find_element(:xpath, "//input[contains(@class,'time-text-box')]") time_text_box.send_keys(start_time, :enter) # 再生中止 begin play_button = driver.find_element(:xpath, "//button[contains(@class,'play-button')]") Selenium::WebDriver::Wait.new(:timeout => 3).until { play_button.attribute("data-toggle-state") == "true" } driver.action.move_to(play_button).click().perform() rescue end
ログを確認
# m3u8のurlを取得 url_m3u8 = "" driver.manage.logs.get(:performance).each do |log_entry| hash_message = JSON.parse(log_entry.message) if hash_message["message"]["method"] == "Network.requestWillBeSent" url = hash_message.dig("message", "params", "request", "url") if url.match(/master\.m3u8/) url_m3u8 = url puts url_m3u8 end end end command = "ffmpeg -i \"#{url_m3u8}\" -bsf:a aac_adtstoasc -movflags faststart #{file_path}"
補足など
ページを開いておけばurlのみで大丈夫みたいだったため、この形にした。
ffmpegの開始が遅れるせいか、開始時間の指定から5秒遅れて始まることに気をつける。終了時間も指定しないとよくないかも。開始時間を指定するのは全体の時間短縮のためで、微調整は後でする。
ブラウザが作れると後々便利そうだけど……。