【libcef】注入javascript

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要在 `CefSharp` 中注入 `JavaScript` 并从网页上点击后返回点击元素的 `XPath`,您可以使用以下步骤: 1. 在 `CefSharp` 控件的 `FrameLoadEnd` 事件中注入 `JavaScript` 代码。 ```csharp private void ChromiumWebBrowserFrameLoadEnd(object sender, FrameLoadEndEventArgs e) { if (e.Frame.IsMain) { e.Frame.ExecuteJavaScriptAsync(@" function handleClick(event) { var target = event.target || event.srcElement; window.external.notify(target.tagName + '|' + target.id + '|' + target.className + '|' + getXPath(target)); } function getXPath(node) { if (node && node.nodeType == Node.ELEMENT_NODE) { var xpath = ''; var element = node; while (element) { var id = element.getAttribute('id'); var tagName = element.tagName.toLowerCase(); var siblings = element.parentNode.children; var siblingIndex = 1; for (var i = 0; i < siblings.length; i++) { if (siblings[i] == element) { xpath = '/' + tagName + '[' + siblingIndex + ']' + xpath; break; } if (siblings[i].tagName == tagName) { siblingIndex++; } } element = element.parentNode; } return xpath; } return null; } document.addEventListener('click', handleClick); "); } } ``` 上面的 `JavaScript` 代码会在网页上注入一个 `click` 事件监听器,当用户在网页上单击时,会将点击元素的 `tagName`、`id`、`className` 和 `XPath` 信息通过 `window.external.notify()` 方法发送给 `C#` 端。 2. 在 `C#` 端注册 `JavascriptObjectRepository` 对象,并实现 `IJavascriptCallback` 接口。 ```csharp public class ClickedElementInfo { public string TagName { get; set; } public string Id { get; set; } public string ClassName { get; set; } public string XPath { get; set; } } public class JsCallback : IJavascriptCallback { public void Dispose() { } public void InvokeAsync(object[] args) { var clickedElementInfo = new ClickedElementInfo(); var info = ((string)args[0]).Split('|'); clickedElementInfo.TagName = info[0]; clickedElementInfo.Id = info[1]; clickedElementInfo.ClassName = info[2]; clickedElementInfo.XPath = info[3]; // TODO: 处理点击元素信息 } } public class JsObject { public void NotifyClickedElement(string clickedElementInfo) { var jsCallback = new JsCallback(); jsCallback.InvokeAsync(new object[] { clickedElementInfo }); } } var jsObject = new JsObject(); browser.JavascriptObjectRepository.Register("external", jsObject, true); ``` 上面的代码会将 `JsObject` 对象注册为 `JavascriptObjectRepository` 中的 `external` 对象,当 `JavaScript` 通过 `window.external.notify()` 方法发送信息时,会调用 `JsObject.NotifyClickedElement()` 方法,并将点击元素信息作为参数传递给 `C#` 端。 3. 在 `C#` 端处理点击元素信息。 ```csharp private void HandleClickedElementInfo(ClickedElementInfo clickedElementInfo) { // TODO: 处理点击元素信息 } ``` 上面的代码会将点击元素信息作为参数传递给 `HandleClickedElementInfo()` 方法,您可以在该方法中处理点击元素信息,例如打印到控制台或将信息保存到文件中。 注意:上面的代码仅适用于 `CefSharp` 版本 75 或更高版本。如果您使用的是更早的版本,请升级到最新版本。另外,如果您需要获取其他元素的信息,可以相应地修改 `JavaScript` 代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜猫逐梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值