我在我的程序中使用 webbrowser 控件,但是当导航到一个站点后,我尝试使用 webbrowser 的文档获取一些元素(如 getelementbyid ...)我注意到缺少一些元素。
我知道元素是由一些 javascript 动态插入到页面中的。
我搜索了获取这些元素的方法,并尝试让它们注入要在页面中执行的 javascript,并通过 window.external 方法返回一些元素(或仅通过警报尝试),但即使执行此脚本,它们也只会返回结果与原始代码中文档上的方法相同。
有一种方法可以以某种方式访问我的程序中的这个“不可见”元素,就像我在 Internet Explorer 中按 F12 访问它们一样?谢谢你的回答,对不起我的床英语。
这是我的代码:
private void button2_Click(object sender, EventArgs e)
{
//injecting and executing my javascript code
HtmlElement head = webBrowser1.Document.GetElementsByTagName("head")[0];
HtmlElement scriptEl = webBrowser1.Document.CreateElement("script");
IHTMLScriptElement element = (IHTMLScriptElement)scriptEl.DomElement;
element.text = "function sayHello() { window.external.f1(document.getElementsByTagName('html')[0].innerHTML); }";
head.AppendChild(scriptEl);
webBrowser1.Document.InvokeScript("sayHello");
String v;
System.IO.StreamWriter file = new System.IO.StreamWriter("c:\\test.txt");
foreach (HtmlElement k in webBrowser1.Document.GetElementsByTagName("html"))
{
v= k.OuterHtml;
file.WriteLine(v);
}
file.Close();
}
[ComVisible(true)]
public class MyScript {
//function called by the javascript
public void f1(string s)
{
System.IO.StreamWriter file = new System.IO.StreamWriter("c:\\test2.txt");
file.WriteLine(s);
file.Close();
}
}
在执行结束时,test 和 test2 都具有相同的 html,但缺少某些元素。