我正在将一个 .NET 的
在
据我所知,在WebKit中,我无法做到这一点。InvokeStriptMethod方法已经失效了,但是StringByEvaluatingJavaScriptFromString没有失效,这使我可以将脚本注入当前文档,并在以后的任何时候调用它们。
请注意,这些文档不会是我自己创建的文档,因此我不能像为每个元素分配ID那样做。这是一个网络爬虫,我需要尽可能地避免干扰文档的元素。
一个可能有效的hack是为元素分配一个临时ID并备份旧ID,然后我可以从JavaScript或C#中进行GetElementById调用来获取元素,然后重新分配旧元素的ID。问题是,当ID为undefined时,WebKit的GetAttribute('id')将给我一个空字符串,因此我的C#代码无法知道ID是一个空字符串还是undefined,而且谁知道,当前网页的脚本可能依赖于ID为undefined的某些原因,因此将ID设置为空字符串可能会破坏他们的javascript。
WebBrowser
替换为 WebKit.NET
,其中一个功能是在 WebBrowser
中使用的,但我无法想出如何在我编写的 WebKit
包装器中实现,即从 JavaScript 和 C# 代码中传递 DOM 元素的能力。在
WebBrowser
中,您只需调用 InvokeScript
并将 HtmlElement
的 DomElement
属性作为参数传递,JavaScript 函数将获得该元素。同样地,您可以将元素从 JavaScript 传递到 C#,C# 代码将获得一个 DomElement
对象。据我所知,在WebKit中,我无法做到这一点。InvokeStriptMethod方法已经失效了,但是StringByEvaluatingJavaScriptFromString没有失效,这使我可以将脚本注入当前文档,并在以后的任何时候调用它们。
请注意,这些文档不会是我自己创建的文档,因此我不能像为每个元素分配ID那样做。这是一个网络爬虫,我需要尽可能地避免干扰文档的元素。
一个可能有效的hack是为元素分配一个临时ID并备份旧ID,然后我可以从JavaScript或C#中进行GetElementById调用来获取元素,然后重新分配旧元素的ID。问题是,当ID为undefined时,WebKit的GetAttribute('id')将给我一个空字符串,因此我的C#代码无法知道ID是一个空字符串还是undefined,而且谁知道,当前网页的脚本可能依赖于ID为undefined的某些原因,因此将ID设置为空字符串可能会破坏他们的javascript。
有没有更好的想法或者其他我可以使用的WebKit
方法?