如何使用 Delphi Sydney 10.4.2 和 Edge Webbrowser 组件获取 HTML 源

问题描述 投票:0回答:1

我在 Delphi 10.4.2 中有

TEdgeBrowser
。我想从 HTML 代码中提取基于 RegEx 的字符串。 过去,可以使用
TWebBrowser
(仅适用于 IE 11 或更低版本)作为 selectedEngine。

但我的网站不再需要 IE 11+。所以我必须在Syndey中使用基于Edge的

TEdgeBrowser
。 我发现这篇文章可以通过脚本调用获取源代码,但是使用最新的 Edge(Evergreen Standalone 从这里),我总是得到
AResultObjectAsJson
将是“null”(没有结果返回)。

我可以做什么来完成我的任务?

delphi twebbrowser tedgebrowser
1个回答
0
投票

你可能会得到 nil/NULL 因为你没有得到正确的脚本在 js 中运行

让我在c++builder中回答你(将其移动到delphi非常容易)。

为 ICoreWebView2ExecuteScriptCompletedHandler 定义一个新的句柄类:

class TCoreWebView2ExecuteScriptCompletedHandler
: public TCppInterfacedObject<ICoreWebView2ExecuteScriptCompletedHandler>
{
public:
    HRESULT __stdcall Invoke(HRESULT errorCode, WideChar* resultObjectAsJson);
};

HRESULT __stdcall TCoreWebView2ExecuteScriptCompletedHandler::Invoke(HRESULT errorCode, WideChar* resultObjectAsJson)
{
    if (FAILED(errorCode))
    {
        ShowMessage("Failed to execute script")
        return errorCode;
    }
    ShowMessage(resultObjectAsJson);
    return S_OK;
}

然后使用它。 document.documentElement.outerHTML 将 html 代码返回给 resultObjectAsJson。一些字符是基于 \u 代码 unicode 的,还有一些其他字符是用 转义的。您将需要一个转换函数。由于它是一个 json 字符串,所以响应的内容也会以引号开头和结尾。

EdgeBrowser->DefaultInterface->ExecuteScript(L"document.documentElement.outerHTML;",_di_ICoreWebView2ExecuteScriptCompletedHandler(new TCoreWebView2ExecuteScriptCompletedHandler()));

更多信息这里

© www.soinside.com 2019 - 2024. All rights reserved.