Wie InnerHtml einer Browser Form ändern ?

hallo!
vielleicht kann mir ja jemand weiterhelfen, ich möchte mit vb.net 2005 (express edition) ein Tool erstellen mit dem ich den value Wert einer Input Box vorbelegen kann. Gegeben ist folgender Code:

tmp = WebBrowser1.Document.Forms(0).InnerHtml

File: 

Es soll nun im _file Input_ ein weiter Wert 

    value=

 ergänzt werden. Direkt das 

    tmp.InnerHtml 

ändern funktioniert wohl wegen der Table Tags überhaupt nicht. Also Funktionen wie 

    tmp.Replace()

 oder 

    tmp.Insert()

 haben einfach keine Wirkung (oder ich mache etwas falsch?)

Wenn ich jedoch den Wert von 

    tmp.InnerText

 ändere wird dieser übernommen und auch in das 

    tmp.InnerHTML

 Feld geschrieben. Leider werden dabei alle Sonderzeichen in HTML Special Chars umgewandelt!

Aus 

     wird dann 
    
        & l t ;TBODY & g t ;
    
     (hier mit Leerzeichen, da es auch mit code-tag hier wieder zu umgewandelt wird)
    was im Browser nicht dargestellt wird. Hat jemand eine Idee wie man das Lösen könnte?
    
    Danke für Tips!

Hallo Maze,

leider verstehe ich deine Frage nicht (ganz).

Du willst unter .net eine Webseite verändern. Dabei gibt es zwei mir bekannte Varianten:

Du erstellt unter .net eine apsx Seite, die VB als „Source behind“ verwendet. Dann würde ich auch eine asp:TextBox einsetzen, die dann direkt per VBA behandet werden kann:

test

Und in c# (VB dürfte recht ähnlich ausfallen)
testTextbox.Text=„mein text“;

Oder du möchtest in der html Seite per Script (VB?) etwas ändern.
Dann könnte etwas wie:

window.document.getElementById(‚file‘).innerText = ‚noch en text‘;

helfen.

Kannst du mal präzisieren?

mfg

Dirk.Pegasus

Hi! Danke schonmal für deine Hilfe…

Du willst unter .net eine Webseite verändern.

ich würde eher sagen, ich will sie ‚fernbedienen‘ da sie nicht meine ist kann ich sie nicht verändern.

Also das Quellpfad eingeben in die Dateiauswahl (was mein aktuelles Problem darstellt, da ich den Pfad nicht so in das InnerHtml geschrieben bekomme, dass es vom Browser korrekt interpretiert wird) und den Upload Starten Button drücken will ich damit simulieren/automatisieren.

Ich nehme an, ich muss über z.B. die GetElementById Methode in Kombination mit vielleicht einem setAttribute o.ä. etwas zusammenstellen. Aber ich komme einfach noch nicht mit den Eigenheiten des innerHTML klar, da dieses den zugewiesenen Code immer irgendwie uminterpretiert (z.B. wenn ich versuche .innerHTML = „“ zuzuweisen werden die eckigen Klammern samt Inhalt komplett ignoriert).

Hallo Maze,

ich würde eher sagen, ich will sie ‚fernbedienen‘ da sie nicht
meine ist kann ich sie nicht verändern.

Fernbedienen scheidet sicher aus, die Seite liegt „dann“ entweder noch auf dem Server oder beim Client vor und kann (wenn das überhaupt geht) nur dort verändert werden.

Was du möchtest klingt eher nach: „Ich hol mir den HTML Code einer Seite, ändere den und schreibe die Seite an einen Ort meiner Wahl“.

Abgesehen davon, dass man da ja auf dumme Gedanken kommen kann (Phishing ist da wohl das Stichwort): Was soll das werden? Üblicherweise schreibt jemand eine Seite und stellt die zur Vefügung, so wie sie ist. Änderungen sollte nur der vornehmen der die Seite hat, was auch einen guten Grund hat.

Ohne das Ziel und die (halbwegs) genauen Umstände (Intranet?) zu kennen, kann dir wohl keiner helfen, was man auch an der Menge der Antworten ablesen kann…

mfg

Dirk.Pegasus

Hi again!

Fernbedienen scheidet sicher aus, die Seite liegt „dann“ […] beim Client vor und kann […] nur dort verändert werden.

so ‚ungefähr‘ sollte es sein, nur das ich sie Dank vb.net nicht erst neu schreiben muss sondern direkt auf die HTML Objekte in meinem WebBrowser1 Steuerelement zugreifen kann.

Abgesehen davon, dass man da ja auf dumme Gedanken kommen kann
(Phishing ist da wohl das Stichwort): Was soll das werden?

kein Phishing, das Ergebnis soll nur mir ‚lokal‘ als Upload Hilfe für Bilder Uploads (daher die vorbelegung der INPUT - Upload Box mit einer Datei) dienen. Ähnliches gibt es ja schon von vielen Anbietern als extra Tools (z.B. bei yahoo Fotos das „Easy Upload Tool“. Also um das umständliche auswählen jeder einzelnen Datei zu umgehen.

Ich bin auch schon etwas weitergekommen. Mit

tmp = WebBrowser1.Document.Forms(0).Children(0).FirstChild

bzw.

tmp = WebBrowser1.Document.Forms(0).Children(0).Children(0).FirstChild

kann ich auf die einzelnen ‚Unterlemente‘ zugreifen also:

File: 

und das nächste ergibt:

File: 

für den Wert von InnerHTML.

Noch direkter komme ich hin indem ich:

tmp = WebBrowser1.Document.All("file")

verwende. Da gibt mir InnerHTML nurnoch:

zurück. Jetzt ist nurnoch die Frage, wie ich dort hinein mein value=„pfadmeineDatei“ hineinbekomme! Mit

tmp.SetAttribute("VALUE", pfadmeineDatei)

passiert leider garnichts d.h. es fügt das Attribut nicht in den INPUT Tag ein.

mfG

Hallo Maze,

Wenn das attribut nicht existiert, kann man es auch nicht füllen:

var valueAttr= document.createAttribute("Value");
 valueAttr.nodeValue = "c:\....";
 var Element = document.getElementsById(meineId);
 Element.setAttributeNode(valueAttr);

mfg

Dirk.Pegasus

Wenn das attribut nicht existiert, kann man es auch nicht
füllen:

in vb.net geht es doch, leider nur wenn ein öffnendes und schließendes HTML Tag vorhanden ist wie . Dahinein kann ich mit setElement(„value“, „xyz“) ein einfügen. Jedoch beim funktioniert es so nicht.

Dein Code ist leider etwas verwirrend (d.h. der Versuch es in visual basic nachzubauen), da es bei mir in vb.net kein createAttribute gibt. Erst wenn ich den System.xml Namspace importiere, aber dann kann ich das auch nur auf XmlDocument Datentypen anweden, was ich wiederum nicht in ein HtmlElement einfügen kann… uhihui nun meine freie Zeit ist um, werde vielleicht in 1-2 Wochen etwas weiterprobieren. Danke soweit!

mfG

Hallo Maze,

man sollte besser aufpassen, mir vb entgangen:

Public Sub SetAttribute ( _
attributeName As String, _
value As String _
)

Allerdings erst ab .net 2.0 …
Das erzeugt ggfs auch das attribut!

mfg

Dirk.Pegasus