我正在寻找一种方法来获取在 onclick 中定义的 JavaScript 代码。我正在使用 .NET 2.0 C# Visual Studio 2005。
例子:
<span id="foo" onclick+"window.location.href='someURL'>click here</span>
我的目标是获取字符串"window.location.href='someURL'"。
设想:
用户在 WebBrowser 控件内单击网页元素,例如上面显示的标记。然后点击的标签被引用到 H tmlElement object
。
然后在我调用的 WebBrowser 控件HtmlElement object's getAttribute("onclick")
中,它只给了我“ System.__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);
}
输出:
dom elem >>>>>>>>>>> mshtml.HTMLSpanElementClass
js value ===> System.__ComObject
如图所示,span.onclick 仍然给我 System.__ComObject,我做错了什么?
在为什么 HtmlElement 的 GetAttribute() 方法返回“mshtml.HTMLInputElementClass”而不是属性的值? 这家伙说它在他的情况下有效,我已经按照它,但我的有点不起作用......
更新
研究,研究……
我可以将引用 VisualBasic.dll 添加到我的 C# 项目中,然后调用该方法来找出这个 System.__ComObject 到底是谁。
Console.WriteLine(Microsoft.VisualBasic.Information.TypeName(span.onclick));
输出:
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 识别页面加载,因此它在"click"
和之间更改 actionType "clickAndWait"
。我的情况,我想让它变得简单。
如果我单击该元素并且如果它是anchor tag
或具有页面加载类型的 javascript,onclick=window.location.href='blah'
那么我想将 actionType 设置为"clickAndWait"
.