<span id="foo" onclick+"window.location.href='someURL'>click here</span>
我的目标是获取字符串 "window.location.href='someURL'"。
场景:
用户点击WebBrowser控件内的网页元素,例如上面显示的标签。然后被点击的标签引用了HtmlElement对象
。
在WebBrowser控件中,我调用HtmlElement对象的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”而不是属性值?中,这位仁兄说他的情况下可以工作,我也按照他的步骤走了,但我的有点不起作用...
更新
调查、调查...
我可以在C#项目中添加对VisualBasic.dll的引用,然后调用该方法来找出这个System.__ComObject到底是谁。
Console.WriteLine(Microsoft.VisualBasic.Information.TypeName(span.onclick));
输出:
JScriptTypeInfo
看起来这是JScript类型... 我怎样才能访问这个对象呢?
更多细节
上述描述基于我的当前项目。该项目旨在创建类似于Selenium IDE的东西,但使用WebBrowser控件代替。
Selenium IDE会创建3种不同的方式来记录网络文档中的元素。
1. actionType
2. xpath
3. value
例如,type, //input[@id=foo], "hello world"
clickAndWait, //link=login, ""
Selenium IDE 通过识别页面加载来更改 "click"
和 "clickAndWait"
之间的 actionType。我的情况比较简单。
如果我点击元素,且它是 anchor tag
或具有类似于 onclick=window.location.href='blah'
的页面加载类型的 JavaScript,则我希望将 actionType 设置为 "clickAndWait"
。
attributes("onclick").value.ToString()
。 - Sam Hobbs