プログラムで 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 があり、一部の要素が欠落しています。