我正在寻找一种方法来获取 onclick 内部定义的 JavaScript 代码。
我正在使用 .NET 2.0 C# Visual Studio 2005。
Example:
<span id="foo" onclick+"window.location.href='someURL'>click here</span>
我的目标是得到字符串“window.location.href='someURL'”.
设想:
用户单击网页元素,例如上面显示的 WebBrowser 控件内部的标签。然后点击的标签被引用到HtmlElement object
.
然后在 WebBrowser 控件中调用HtmlElement object's getAttribute("onclick")
,它只是给了我“系统.__ComObject”。
我搜索了如何处理它,然后发现它可以被转换然后获取值。
if (tag.GetAttribute("onclick").Equals("System.__ComObject"))
{
Console.WriteLine("dom elem >>>>>>>>>>> " + tag.DomElement.ToString());
mshtml.HTMLSpanElementClass span = (mshtml.HTMLSpanElementClass)tag.DomElement;
Console.WriteLine("js value ===>" + span.onclick);
}
Output:
dom elem >>>>>>>>>>> mshtml.HTMLSpanElementClass
js value ===> System.__ComObject
如图所示,span.onclick 仍然给我 System.__ComObject,我做错了什么?
In 为什么 HtmlElement 的 GetAttribute() 方法返回“mshtml.HTMLInputElementClass”而不是属性的值?这家伙说这对他的情况有效,我已经遵循了,但我的有点不起作用......
UPDATE
研究、研究……
我可以将引用 VisualBasic.dll 添加到我的 C# 项目中,然后调用该方法来找出这个 System.__ComObject 到底是谁。
Console.WriteLine(Microsoft.VisualBasic.Information.TypeName(span.onclick));
Output:
JScriptTypeInfo
看起来这是一个 JScript 类型...我如何访问这个对象?
更多详情
以上描述是基于我当前的项目。该项目旨在创建类似 Selenium IDE 的东西。它使用 WebBrowser 控件代替。
Selenium IDE 创建 3 种不同的东西来记录 Web 文档中的元素。
1. actionType
2. xpath
3. value
例如,
type, //input[@id=foo], "hello world"
clickAndWait, //link=login, ""
Selenium IDE 识别页面加载,因此它会更改 actionType"click"
and "clickAndWait"
。我的情况,我想让它变得简单。
如果我单击该元素并且如果它是anchor tag
或者有页面加载类型的 javascript
例如onclick=window.location.href='blah'
然后我想将 actionType 设置为"clickAndWait"
.