はじめに
あるサイトのログインした状態のページをスクレイピングしたくてPythonからSelenium経由でChromeを触ってたけど、めんどくさくなってUnityから直接触れないか調べたら割りとカンタンにできました。
おそらくほぼ同じやり方でFirefoxも対応できると思います。
環境
- OS:macOS Sierra (10.12.6)
- Unity:2017.3.1f1
- Scripting Runtime Version:Experimental(.NET 4.6 Equivalent)
- Unityエディタ上とMacのスタンドアロンビルドで確認
Windows / Linux では未確認。
準備
Seleniumのダウンロードとセットアップ
- NuGetのページの「Manual Download」からSeleniumをダウンロード
- 記事執筆時点の最新バージョンは3.11.0
-
ダウンロードした「selenium.webdriver.x.xx.x.nupkg」の拡張子を「nupkg」から「zip」に変更して解凍
-
中にある
lib/net45/WebDriver.dll
をUnityのPlugins
フォルダ以下に入れる
ChromeDriverのダウンロードとセットアップ
- ここの「Latest Release: ChromeDriver x.xx」のリンクからダウンロード
- 記事執筆時点の最新バージョンは2.37
- zipを解凍して出てきた
chromedriver
ファイルをUnityのStreamingAssets
フォルダに入れる
That's it!
C#からChromeを起動する
あとはC#から好きなようにChromeを操作できる。
WebDriverTest.cs
using OpenQA.Selenium.Chrome;
using UnityEngine;
public class WebDriverTest : MonoBehaviour
{
private ChromeDriver _driver;
void Start()
{
var path = Application.streamingAssetsPath;
// NOTE: 起動にはそこそこ時間がかかる
_driver = new ChromeDriver(path);
// 起動後は好きなようにChromeを操作できる
_driver.Navigate().GoToUrl("http://yahoo.co.jp");
}
void OnDestroy()
{
_driver.Dispose();
}
}
あとがき / TODO
-
StreamingAssets
フォルダを使わなくてもいいかも、要確認 - Windows / Linux のスタンドアロンビルドでも動くか確認
- 誰かチャレンジして結果を教えてください