onclick内で定義されたJavaScriptコードを取得する方法を探しています。.NET 2.0 C#VisualStudio2005を使用しています。
例:
<span id="foo" onclick+"window.location.href='someURL'>click here</span>
私の目標は、文字列「window.location.href='someURL'」を取得することです。
シナリオ:
ユーザーは、WebBrowserコントロール内で、たとえば上記のタグなどのWebページ要素をクリックします。次に、クリックされたタグは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タイプのようです...このオブジェクトにアクセスするにはどうすればよいですか?
より詳しく
上記の説明は私の現在のプロジェクトに基づいています。プロジェクトは、SeleniumIDEのようなものを作成することです。代わりにWebBrowserコントロールを使用します。
Selenium IDEは、Webドキュメントに要素を記録するために3つの異なるものを作成します。
1. actionType
2. xpath
3. value
例えば、
type, //input[@id=foo], "hello world"
clickAndWait, //link=login, ""
Selenium IDEはページの読み込みを認識するため、actionTypeをとの間で変更"click"し"clickAndWait"ます。私の場合、それを単純にしたい。
要素をクリックし、それanchor tagがページロードの種類であるか、またはそのようなjavascriptを持っている場合はonclick=window.location.href='blah'、actionTypeをに設定し"clickAndWait"ます。