Akamai導入サイトがわかりやすいのですがSeleniumでブラウザ操作しようとしてもできなかったサイトの対応方法がわかったので嬉しくて書いています
まずAkamaiとは
本質的にはCDNなんですが、こいつが導入されてるとSeleniumの利用が制限されます(理由までは把握してませんのでなんで?とか聞かないで)
具体的な症状としてはログインページを開こうとした時ロードが終わらないか、ログインページでID/PWを入力してログインボタンを押下するとロードが終わらないのどちらかが大半
で、Akamaiが導入されているかの確認はデベロッパーツールでソースを見れば簡単、Seleniumでサイトを開くと
「<script type=”text/javascript” src=”<サイトドメイン>/akam/**/********” defer=””>」
ってソースが追加されてるので「akam」で検索すれば一発
※普通にChromeで開いてもこのソースは存在しません
Seleniumが使えないサイト
全てAkamaiが導入されてるサイトってわけではなくて結果としてSeleniumが使えない&これから書く方法で先に進めるサイトです
※気づいたら追加します
サイト | URL |
---|---|
ZOZOTOWN | https://zozo.jp/ |
Peach(企業用?) | https://travelagent.flypeach.com/ |
タオバオ | https://login.taobao.com/ |
利用できるようにするための方法
まずは具体的なソースを通常との比較で
Dim driver As Selenium.ChromeDriver
Set driver = New Selenium.ChromeDriver
driver.Start
driver.Get "https://javeo.jp/"
Dim driver As Selenium.ChromeDriver
Set driver = New Selenium.ChromeDriver
CreateObject("WScript.Shell").Run ("chrome.exe --remote-debugging-port=9222)
driver.SetCapability "debuggerAddress", "127.0.0.1:9222"
driver.Get "https://javeo.jp/"
一般的だと「start」にあたる部分を変更しています
比較してみれば見た目にも違いがあって
- アドレスバーの下に「Chrome は自動テスト ソフトウェアによって制御されています。」が表示されない
- アドレスバー横のアイコンが表示され日頃使っているプロファイルなのがわかる

個人的な理解
通常はChromeDriverがChromeを起動させて操作する(つまり外から操作)のに対して今回の方法だとリモートデバックポートを使うってことで起動しているChromeをポートを通じて操作する(つまり内から操作)してるんじゃないかなと思ってます
※見当違いなこと言ってる可能性もありますが個人の感覚の話です
使用感は起動の仕方が違う以外は今のところエラー終了してもChromeが落ちないぐらいでプログラムは従来のまま使用できそうなのでもしSeleniumが利用できないサイトにぶち当たった時は置き換えてみてください
あとがき
スクレイピング自体を推奨するわけではなくてRPAツール代わりとしてSeleniumは無償なのに十分な効果を発揮できるので今回の発見は個人的にかなり嬉しくて
お仕事あればお待ちしています
コメント