yayugu / net-radio-archive

MIT License
188 stars 29 forks source link

最近のFirefox+Selenium Web-DriverでAG-ONが録音できない #35

Closed warpzone closed 7 years ago

warpzone commented 7 years ago

今までAG-ONの録音はやってなかったのですが、試しにやってみたところ、最近のバージョンの Firefox+Selenium Web-Driverではちゃんと動きませんでした。

http://qiita.com/yssg/items/a054d67bc7c7fc39b276

最近では、Selenium Web-Driverは3.xに上げて、Firefoxには追加でGecko Driverをインストールしないと だめなようです。

さらに、lib/agon/download/downloading.rb にもこんな感じのパッチを当てたら、動くようになりました。 ユーザーエージェントの設定方法が変わったのと、配信ページへの直接navigateではHLSへのリンクが 取得できなかったので、いったんログインページからログイン後、配信ページへ遷移するようにしました。

sleepのところはもうちょっとマジメに読み込みを待つようにしたほうがいいでしょうが…。

Gemfile.lockとかの修正も必要なので、プルリクではなくいったんIssueにて。

--- a/lib/agon/downloading.rb
+++ b/lib/agon/downloading.rb
@@ -16,7 +16,8 @@ module Agon
         end
         profile = Selenium::WebDriver::Firefox::Profile.new
         profile['general.useragent.override'] = 'Mozilla/5.0 (iPhone; CPU iPhone OS 9_0 like Mac OS X) AppleWebKit/601.1.32 (KHTML, like Gecko) Mobile/13A4254v
-        @s = Selenium::WebDriver.for :firefox, profile: profile
+        caps = Selenium::WebDriver::Remote::Capabilities.firefox(firefox_options: { profile: profile.as_json.values.first })
+        @s = Selenium::WebDriver.for :firefox, desired_capabilities: caps

         url = get_m3u8_url(program)
       rescue => e
@@ -29,13 +30,16 @@ module Agon
     end

     def get_m3u8_url(program)
-      @s.navigate.to "http://ct.uliza.jp/AG-ON/play.aspx?clientid=749&msid=339&episodeid=#{program.episode_id}"
+      @s.navigate.to "https://ct.uliza.jp/AG-ON/smartphone/login.aspx?clientid=749&msid=339"
       elm = @s.find_element(:name, 'mail')
       elm.send_keys Settings.agon.mail
       elm = @s.find_element(:name, 'passwd')
       elm.send_keys Settings.agon.password
       @s.find_element(:id, 'btnLogin').click

+      sleep(3)
+
+      @s.navigate.to "http://ct.uliza.jp/AG-ON/play.aspx?clientid=749&msid=339&episodeid=#{program.episode_id}"
       m3u8_url = @s.find_element(:tag_name, 'video')['src']
       @s.quit
       return m3u8_url
yayugu commented 7 years ago

試していないですがGeckoDriver必須となると インストール手順が変更になり面倒ですね…

ブラウザのバージョンが上がった場合にwebdriverのバージョンも上げないといけないのはいつものことですのでガンガン更新したら良いと思いますが

yayugu commented 7 years ago

手元で試しましたが、GeckoDriverがProfile受け付けないのがだいぶよくないですね そのバグが直ったらバージョンあげます

warpzone commented 7 years ago

バグというか、上記変更のようにプロファイル指定するように仕様変更したのだと理解したのですが、どうなんでしょう?

yayugu commented 7 years ago

だとすると

配信ページへの直接navigateではHLSへのリンクが取得できなかった

こちらはなぜ発生しているのでしょうか

warpzone commented 7 years ago

うーん。headless : false にして見ていると、直接navigateでも正常にログインしたあとに配信ページに遷移しているんですよねえ…。

yayugu commented 7 years ago

Geckodriverで動作するようにしました

https://github.com/SeleniumHQ/selenium/pull/3174 profileの問題は3.0.4で直ったそうです

waitの追加が必要でしたがまあ動いたのでよしということで

https://github.com/yayugu/net-radio-archive/commit/e521e2b5e696ea75a4c65bd0fb79848895737bc3

warpzone commented 7 years ago

反応遅れてすみません、ありがとうございます。 さっそく更新します!