AxWebBrowser ansteuern


zarrandreas

Mitglied
Ich möchte im Internet die Webseiten ansteuern, dazu möchte ich die Button Clicks simulieren.
Es gibt ja bereits ein Element in C# AxWebBrowser, der kann schon die Post Variablen abschicken und javascript ausführen, ich möchte aber die Butons anklicken und nicht erst die Seite analysieren die Post Variablen sammeln und dann zwischen durch die Javascript ausführen.
Gibt es da ein bestimmte Methode die Ereignise im Browser zu merken und dann diese zu simulieren.
Das Programm muss button anklicken, als ob ich dieses angeklickt habe.

Danke für die Antwort!
 

Alexander Schuc

crazy-weasel
Hallo.

Sobald du irgendwas weisst vom Button um ihn zu identifizieren (ID, Name, Value..) ist es kein Problem.

Zuerst brauchst du noch einen Verweis auf die 'Microsoft HTML Object Library' (Bei den COM Objekten zu finden), und gleich der bequemlichkeit ein "using mshtml;" setzen.

Im folgenden Snippet ist 'webCtrl' das AxWebBrowser-Objekt.

Code:
IHTMLDocument3 doc = (IHTMLDocument3) webCtrl.Document;
doc.getElementById("test").click();
Bei mir hätte der Button der gedrückt wird die ID "test".

MSDN:
# IHtmlDocument3
# Alle Interfaces aus mshtml

MfG,
Alex
 

zarrandreas

Mitglied
Ich danke für die schnelle Antwort und hilfreiche Antwort

Gibt es eigentlich eine Möglichkeit ein Button oder Link id rauszufinden, auch wenn diese kein Attribut
Code:
<input type="submit "name="test" action="www.tutorials.de" >
haben.
 

Alexander Schuc

crazy-weasel
Wenn du weisst wie der Button beschriftet ist, geht es. Musst halt einfach alle Form-Elemente durchprobieren:

Für das folgende Snippet nehmen wir an, das wir mehrere ButtonElemente haben, und eines hat die beschriftung "test3"

Code:
IHTMLDocument3 doc = (IHTMLDocument3) webCtrl.Document;

IHTMLInputTextElement txtOutput = (IHTMLInputTextElement) doc.getElementById("output");
			
IHTMLElementCollection col = doc.getElementsByTagName("input");

System.Collections.IEnumerator enumerator = col.GetEnumerator();

while (true)
{
	IHTMLInputElement el = (IHTMLInputElement) enumerator.Current;

	if (el != null)
	{
		if (el.value == "test3")
			txtOutput.value = "test3 found";
	}              

	if (!enumerator.MoveNext())
		break;
}
 

Alexander Schuc

crazy-weasel
Ach, im übrigen. Alles was du mit JavaScript machen kannst, kannst du mittels mshtml auch in C# Code mit dem WebBrowserControl nachbilden.
Schau dir einfach mal bisserl JavaScript an, und die Interfaces in mshtml.

Viel Spass wünsche ich dir damit. Kann man einige lustige Sachen machen. :)
 

zarrandreas

Mitglied
Noch eine Frage.
Gibt es eine Möglichkeit HTML Code von der Webseite schön formatiert (villeicht sogar farbig) in dem Texteditor ausgeben. Ich habe gehört, dass der AXBrowser so etwas auch machen kann.
 

Alexander Schuc

crazy-weasel
Sorry das weiss ich niun nicht, aber ich glaube nicht das dieses Control den HTML Code direkt, und noch dazu in Farbe, anzeigen kann.

Der Internet Explorer würde dies sonst auch tun (rate mal was du mit diesem Control benutzt), aber er verwendet auch nur Notepad zum Anzeigen des Codes.
 

zarrandreas

Mitglied
Noch eine Frage
da gibt es doch die Funktion IHTMLDocument2.elementFromPoint
Code:
			IHTMLDocument2 doc = (IHTMLDocument2) ((AxSHDocVw.AxWebBrowser)sender).Document;
		
			
			IHTMLElement elem = doc.elementFromPoint( mouse.X, mouse.Y );
Ich weiss aber nicht wie ich an die Mouse Position herauskriege und vorallem ob diese Position dann auch in dem Browser gelten wird(wegen anderen Koordinatensystem)

Wie mache ich das am besten, gibt es da sowas wie ein Ereignis onmousemove(... )?

:offtopic:
 

zarrandreas

Mitglied
Ich möchte die OnMouseMove Ereignis in dem AxSHDocVw.AxWebBrowser auslösen

Wie füge ich einer Klasse ein Ereignis hinzu, nehmen wir an, ich habe
Code:
public delegate void MouseMoveBrowserDelegate();   // delegate declaration

	/*
	 * diese classe verandert Browser
	 * */
	class MyBrowser:AxSHDocVw.AxWebBrowser
	{
	
		public event System.Windows.Forms.MouseEventHandler MouseMove;
}
und dann die nächste Klasse in der ich die Instanz von MyBrowser habe und dieser dann ein Event hinzufüge

Code:
public class Window_Form:System.Windows.Forms.Form
	{
		..
		private Wetmaschine.StateAutomat.Browser.MyBrowser browser;
		..

		public Window_Form(String Title)
		{
			InitializeComponent();
			
			this.browser.MouseMove += new System.Windows.Forms.MouseEventHandler(this.Event_Browser_MouseMove); 
			
			
}

private void Event_Browser_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
		{
//Breakpoint
}
}
Ich habe Breakpoint in der „Event_Browser_MouseMove“ funktion gesetzt, aber das Programm springt nicht in diese Funktion, egal, wie oft ich mit der Mouse über MyBrowser rüber wandere.

Was mache ich falsch weiß da jemand Bescheid.
Übrigens ich versuche ein Programm für das Überwachen von Forum zu machen(mehrere Foren beobachten und falls ein neuer Massage geprostet wurde, dann mich benachrichtigen, villeicht sogar auf mein Handy)
 

zarrandreas

Mitglied
Das ist ableitungsbaum von AxWebBrowser
Code:
			AxSHDocVw.AxWebBrowser
				System.Windows.Forms.AxHost
					System.Windows.Forms.Control
System.Windows.Forms.Control hat ein Event "MouseMove" in System.Windows.Forms.AxHost ist dieser Event aber verschwunden.
Wie kann ich dieses event aus AxSHDocVw.AxWebBrowser Klasse ansprechen?