我在 Delphi 10.4.2 中有
TEdgeBrowser
。我想从 HTML 代码中提取基于 RegEx 的字符串。
过去,可以使用 TWebBrowser
(仅适用于 IE 11 或更低版本)作为 selectedEngine。
但我的网站不再需要 IE 11+。所以我必须在Syndey中使用基于Edge的
TEdgeBrowser
。
我发现这篇文章可以通过脚本调用获取源代码,但是使用最新的 Edge(Evergreen Standalone 从这里),我总是得到 AResultObjectAsJson
将是“null”(没有结果返回)。
我可以做什么来完成我的任务?
你可能会得到 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()));
更多信息这里