こんにちは。
現在、Selenium × RubyでInstagramのスクレイピングツールを作成しているのですが、下記のような**「アプリをインストールしますか?」の通知が発生するとウインドウ上のどのボタンもSelenium上で操作することができなくなる**ので困っています。
AWSで契約したWindowsサーバー上にSeleniumを使ってChromeを操作しInstagramをスクレイピングするプログラムをRubyで記述しています。
バージョンは以下のとおりです
- ruby 2.3.3
- selenium-webdriver 3.14.0
- chromedriver 2.43
Instagramにアクセスするまでのコードは以下のとおりです。WindowsからクローリングしていることがInstagram社に知られるとブロックされる可能性もありますのでUSERAGENTをiOSに設定しています。
ruby
1require 'selenium-webdriver' 2 3USER_AGENT = "Mozilla/5.0 (iPhone; U; CPU iPhone OS 12_1_2 like Mac OS X; ja-jp) AppleWebKit/605.1.15 (KHTML,like Gecko) Version/12.0 Mobile/15E148Safari/604.1" 4 5setting = Selenium::WebDriver::Chrome::Options.new(args: [ "--lang=ja", "--user-data-dir=./profile", "--user-agent=#{USER_AGENT}"]) 6 7driver = Selenium::WebDriver.for :chrome, options: setting 8 9driver.get('https://www.instagram.com/account_name/')
このプログラムでアクセスするとまれに上記の画像にあるような通知が発生します。この通知が非常に強力で、これを手動で何らかのボタンを押さないとSeleniumが動作しません。
ネットでググって
ruby
1driver.switch_to.alert.dismiss
などで対応ができると書いてあったので実行してみたのですがオブジェクトを取得できず失敗しました。
USERAGENTをWindowsのままであればこの通知は発生しないと思いますが、都合上、iOSのままにしておきたいです。この通知を操作する方法をご存知の方がいらっしゃいましたら教えてください。
※ちなみに、この通知ですが、作成したばかりのInstagramアカウントで、ログイン処理をすることで再現をしやすくなります。
一度、手動でクリックしてしまうとしばらく発生しなかったりするので2回目以降の再現性が少し低めです。
Windows以外でもMacOSでもこの現象が発生したことを確認しております。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/01/21 08:37
2019/01/21 09:04
2019/01/21 09:42