Chrome
Selenium
C#
Unity
Unity2017.3

UnityのC#からSelenium経由でChromeをゴニョゴニョする

はじめに

あるサイトのログインした状態のページをスクレイピングしたくて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のダウンロードとセットアップ

  1. NuGetのページの「Manual Download」からSeleniumをダウンロード

    • 記事執筆時点の最新バージョンは3.11.0
  2. ダウンロードした「selenium.webdriver.x.xx.x.nupkg」の拡張子を「nupkg」から「zip」に変更して解凍

  3. 中にあるlib/net45/WebDriver.dllをUnityのPluginsフォルダ以下に入れる

ChromeDriverのダウンロードとセットアップ

  1. ここの「Latest Release: ChromeDriver x.xx」のリンクからダウンロード

    • 記事執筆時点の最新バージョンは2.37
  2. 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 のスタンドアロンビルドでも動くか確認
    • 誰かチャレンジして結果を教えてください

参考