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

如何使用UnityWebRequest获取任意网站指定元素的文本内容?

在Unity中实现类似JS querySelector的网页元素提取功能

UnityWebRequest仅能获取网页的原始HTML文本,本身没有内置DOM解析能力,要实现类似querySelector的元素选择功能,需要借助第三方HTML解析库,最常用的是HtmlAgilityPack,以下是具体实现方案:

1. 导入HtmlAgilityPack到Unity

从NuGet下载兼容.NET Framework的HtmlAgilityPack版本,将HtmlAgilityPack.dll复制到Unity项目的Plugins文件夹(无此文件夹则新建)。

2. 修改请求代码,添加元素解析逻辑

下面的示例通过HtmlAgilityPack解析HTML,用XPath(类似CSS选择器的定位方式)提取指定元素的文本:

using UnityEngine;
using UnityEngine.Networking;
using HtmlAgilityPack;
using System.Collections;

public class API : MonoBehaviour
{
    [SerializeField] private string url;
    // 替换为目标元素的XPath,例如//div[@class='target-content']/text()
    [SerializeField] private string elementXPath = "//h1/text()";

    private void Start()
    {
        StartCoroutine(SendRequest());
    }

    private IEnumerator SendRequest()
    {
        UnityWebRequest request = UnityWebRequest.Get(url);
        yield return request.SendWebRequest();

        if (request.result != UnityWebRequest.Result.Success)
        {
            Debug.LogError($"请求失败: {request.error}");
            yield break;
        }

        string htmlContent = request.downloadHandler.text;
        HtmlDocument doc = new HtmlDocument();
        doc.LoadHtml(htmlContent);

        // 提取目标元素文本
        HtmlNode targetNode = doc.DocumentNode.SelectSingleNode(elementXPath);
        if (targetNode != null)
        {
            string requiredText = targetNode.InnerText.Trim();
            Debug.Log("提取到的文本: " + requiredText);
        }
        else
        {
            Debug.LogWarning("未找到目标元素");
        }
    }
}

3. 选择器使用说明

  • 若习惯CSS选择器语法,可添加HtmlAgilityPack.CssSelectors扩展库,就能用doc.DocumentNode.QuerySelector(".target-class")的写法,和JS的querySelector完全一致。
  • 常用XPath示例:
    • 提取class为main-title的元素文本://*[@class='main-title']/text()
    • 提取id为content-box的div内文本://div[@id='content-box']/text()

补充:WebGL平台专属方案

如果项目是WebGL,可以直接通过JS交互调用浏览器DOM API:

using UnityEngine;
using UnityEngine.Networking;
using System.Collections;

public class API : MonoBehaviour
{
    [SerializeField] private string url;
    [SerializeField] private string cssSelector = ".target-element";

    private void Start()
    {
        StartCoroutine(SendRequest());
    }

    private IEnumerator SendRequest()
    {
        UnityWebRequest request = UnityWebRequest.Get(url);
        yield return request.SendWebRequest();

        if (request.result != UnityWebRequest.Result.Success)
        {
            Debug.LogError($"请求失败: {request.error}");
            yield break;
        }

        // 将HTML传递给JS解析
        string html = request.downloadHandler.text;
        Application.ExternalCall("extractElementText", html, cssSelector);
    }

    // 接收JS返回的提取结果
    public void OnTextExtracted(string text)
    {
        Debug.Log("JS提取到的文本: " + text);
    }
}

在WebGL的HTML模板中添加对应JS函数:

function extractElementText(html, selector) {
    let tempContainer = document.createElement('div');
    tempContainer.innerHTML = html;
    let targetElement = tempContainer.querySelector(selector);
    let result = targetElement ? targetElement.textContent.trim() : "未找到目标元素";
    // 回调Unity的接收方法
    SendMessage('API', 'OnTextExtracted', result);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 18:45:17