You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity Android平台类Selenium WebDriver网页交互方案咨询

Unity Android平台实现类Selenium WebDriver功能的方案

你理解的没错,常规Selenium WebDriver依赖桌面浏览器驱动(如ChromeDriver),无法直接在Unity Android打包的APK中使用。针对Unity Android平台的后台网页交互需求,以下是几个等效的实现方案:

方案1:Unity WebView + JavaScript注入

这是最直接的方案,利用Unity的WebView组件加载网页,通过注入JavaScript实现元素定位与交互,完全覆盖Selenium的核心功能:

  • 元素定位:通过JS的document.querySelector()(CSS选择器)、document.getElementById()、document.getElementsByClassName()等方法定位元素,对应Selenium的FindElementByCssSelector、FindElementById
  • 交互操作:调用元素的.click()模拟点击,设置.value属性模拟文本输入,对应Selenium的Click()、SendKeys()
  • 数据获取:通过JS返回元素的文本、属性值,Unity端接收返回结果

示例代码(Unity C#)

using UnityEngine;
using UnityEngine.UI;

public class WebViewController : MonoBehaviour
{
    public WebView webView;

    void Start()
    {
        webView.LoadURL("https://target-site.com");
        // 网页加载完成后执行交互操作
        webView.OnLoadFinished += (string url) =>
        {
            // 点击ID为"submit-btn"的按钮
            webView.EvaluateJavaScript("document.getElementById('submit-btn').click();", (string result) =>
            {
                Debug.Log("点击操作完成");
            });

            // 给ID为"username-input"的文本框输入内容
            webView.EvaluateJavaScript("document.getElementById('username-input').value = 'test-user';", null);

            // 获取类名为"title"的元素文本
            webView.EvaluateJavaScript("document.querySelector('.title').textContent;", (string text) =>
            {
                Debug.Log("元素文本:" + text);
            });
        };
    }
}

方案2:Unity调用Android原生WebView API

如果需要更底层的控制,可以编写Android原生代码封装WebView操作,再通过Unity的Android交互接口调用:

  • 在Android Studio中编写原生模块,封装元素定位、点击、输入等方法
  • Unity中通过AndroidJavaObject和AndroidJavaClass调用这些原生方法
  • 适合需要处理复杂交互(如触摸手势、隐藏WebView后台运行)的场景

示例代码

Android原生Java代码片段

public class WebViewHelper {
    private WebView webView;

    public WebViewHelper(Context context) {
        webView = new WebView(context);
        webView.getSettings().setJavaScriptEnabled(true);
        // 配置后台运行参数
        webView.getSettings().setLoadsImagesAutomatically(false);
        webView.setWebViewClient(new WebViewClient());
    }

    public void loadUrl(String url) {
        webView.loadUrl(url);
    }

    public void clickElementById(final String id) {
        webView.post(() -> {
            WebElement element = webView.findElementById(id);
            if (element != null) {
                element.click();
            }
        });
    }

    public void inputTextBySelector(final String selector, final String text) {
        webView.post(() -> {
            WebElement element = webView.findElementByCssSelector(selector);
            if (element != null) {
                element.clear();
                element.sendKeys(text);
            }
        });
    }
}

Unity C#调用代码

using UnityEngine;

public class AndroidWebViewHelper : MonoBehaviour
{
    private AndroidJavaObject webViewHelper;

    void Start()
    {
        AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
        AndroidJavaObject currentActivity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
        webViewHelper = new AndroidJavaObject("com.yourpackage.WebViewHelper", currentActivity);

        webViewHelper.Call("loadUrl", "https://target-site.com");

        // 点击指定ID的元素
        webViewHelper.Call("clickElementById", "submit-btn");

        // 给指定CSS选择器的文本框输入内容
        webViewHelper.Call("inputTextBySelector", "#username-input", "test-user");
    }
}

方案3:Chrome Headless + Chrome DevTools Protocol(CDP)

如果需要完全后台无UI的网页交互,可以使用Android版Chrome的无头模式,通过CDP协议控制浏览器:

  • 启动Android上的Chrome无头进程:chrome --headless --remote-debugging-port=9222
  • Unity中通过WebSocket连接到ws://localhost:9222,发送CDP命令实现元素定位、交互
  • 对应Selenium的无头模式,适合不需要渲染UI的后台任务

核心CDP命令示例

  • 元素定位:发送DOM.querySelector命令,传入CSS选择器
  • 模拟点击:发送Input.dispatchMouseEvent命令,设置type: "mousePressed"和type: "mouseReleased"
  • 文本输入:发送Input.dispatchKeyEvent命令,逐个发送字符的按键事件

注意事项

  • 权限配置:Unity Android打包时需要添加INTERNET权限,若使用原生WebView还需ACCESS_NETWORK_STATE
  • 后台运行:Android系统会限制后台进程,若需长期后台操作,需配置前台服务或唤醒锁
  • 内核兼容性:不同Android版本的WebView/Chrome内核版本可能有差异,需针对目标版本测试

内容的提问来源于stack exchange,提问作者Rico

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 15:43:10