Avatar billede fynbo Nybegynder
29. oktober 2004 - 13:32 Der er 38 kommentarer og
1 løsning

Autofill forms

Hej,

jeg ved egentlig godt, at dette højst sandsynligt er umuligt.. men!

Jeg har en form med et browser objekt, som kalder eksempelvis de gule sider.

Kan man via kode, få udfyldt formularen på de gule sider, i browser-vinduet?
Avatar billede sovsekoder Nybegynder
29. oktober 2004 - 13:39 #1
ja det kan man godt.. man kan nemli' få fat i en DOM (document object model af HTML'en).

brug namspace mshtml ved at tilføje "microsoft HTML object library" som reference i dit projekt (mshtml.tlb i c:\windows\system32)
Avatar billede fynbo Nybegynder
29. oktober 2004 - 13:48 #2
Kan du finde et eksempel evt?
Avatar billede sovsekoder Nybegynder
29. oktober 2004 - 13:52 #3
jeps :) to sekunder
Avatar billede sovsekoder Nybegynder
29. oktober 2004 - 13:53 #4
ok.. jeg kan give dig et eksempel der bruger degulesider.dk
Avatar billede fynbo Nybegynder
29. oktober 2004 - 13:54 #5
fint med mig :) det er nu ikke de gule sider, men et internt site, men alle kender de gule sider og havde jeg sagt Google, havde folk ævlet om API'er til Google ;)
Avatar billede sovsekoder Nybegynder
29. oktober 2004 - 13:56 #6
lol du har ret.. jeg tror det er bedre jeg finder nogle gode links:
Avatar billede fynbo Nybegynder
29. oktober 2004 - 13:56 #7
nej nej, skal bare se syntaksten. Brug bare google som eksempel :)
Avatar billede sovsekoder Nybegynder
29. oktober 2004 - 14:03 #8
ok, indsæt teksten "text i textBox" i alle textboxe:
IHTMLDocument2 htmlDoc = this.GetHtmlDocument as IHTMLDocument2;
IHTMLElementCollection elements = htmlDoc.all;
foreach(IHTMLElement element in elements)
{
  if(element.tagName == INPUT)
  {
    object objAttrValue = "text i textBox";
    element.setAttribute("Value", objAttrValue, 0);
  }
}
Avatar billede sovsekoder Nybegynder
29. oktober 2004 - 14:05 #9
jeg har ikke tjekket kode. Og jeg kan se at det skal være "INPUT". og så skal man nok også tjekke om det overhovedet er en textbox osvosv..
Avatar billede sovsekoder Nybegynder
29. oktober 2004 - 14:07 #10
arjjj mand: jeg prøver lige igen:
IHTMLDocument2 htmlDoc = (m_AxWebBrowser.Document) as IHTMLDocument2;
IHTMLElementCollection elements = htmlDoc.all;
foreach(IHTMLElement element in elements)
{
  if(element.tagName == "INPUT")
  {
    object objAttrValue = "text i textBox";
    element.setAttribute("Value", objAttrValue, 0);
  }
}

tror det burde kunne køre. m_AxWebbrowser er variablen til webcontrollen
Avatar billede fynbo Nybegynder
29. oktober 2004 - 14:14 #11
Den siger :

bla bla type or namespace "'IHTMLDocument2' could not be found


Mangler jeg en reference. Har sagt Add Reference -> COM -> mshtml.tlb
Avatar billede sovsekoder Nybegynder
29. oktober 2004 - 14:22 #12
har du en
using mshtml;

i topppen af filen?
Avatar billede fynbo Nybegynder
29. oktober 2004 - 14:32 #13
ja, nu har jeg.

det virkede først da jeg ændre denne linje:
if(element.tagName == "INPUT")
til
if(element.tagName.ToString() == "INPUT")

sidste spørgsmål er så.. hvad med drop-downs og hvis skidtet indeholder frames?

jeg forhøjer self. point ;)
Avatar billede fynbo Nybegynder
29. oktober 2004 - 14:33 #14
og kan man ikke få den til at submitte en form, når den har tjekket alt igennem?
Avatar billede sovsekoder Nybegynder
29. oktober 2004 - 14:33 #15
drop downs skal du ind og tjekke på SELECTED attribut'en om den er true eller false. huske at konvertere objektet til bool
Avatar billede fynbo Nybegynder
29. oktober 2004 - 14:40 #16
hvad mener du? kører alle igennem og så tjekke om den value jeg vil have, er valgt..
Avatar billede sovsekoder Nybegynder
29. oktober 2004 - 14:43 #17
ang. dropdowns: ja, køre alle dropdown mulighederne igennem (OPTION elementer) og på dem tjekke om SELECTED attribut'en er true eller false. På baggrund af dette kan du så se hvad der er valgt.

ang. frames:
for at få fat i en bestemt frame skal man gøre følgende:
object name = "framens navn";
IHTMLWindow2 window = htmlDoc.frames.item(ref name) as IHTMLWindow2;
Avatar billede fynbo Nybegynder
29. oktober 2004 - 14:51 #18
super. smid lige et svar :)
Avatar billede fynbo Nybegynder
29. oktober 2004 - 14:56 #19
én ting til..


foreach(IHTMLElement element in elements)
{
  if(element.tagName == "INPUT")
  {
    object objAttrValue = "text i textBox";
    element.setAttribute("Value", objAttrValue, 0);
  }
}

hvordan får jeg den til at vælge INPUT som hedder fx txtVejnavn
Avatar billede sovsekoder Nybegynder
29. oktober 2004 - 14:59 #20
foreach(IHTMLElement element in elements)
{
  if(element.tagName == "INPUT")
  {

    string name = (string)element.getAttribute("name", 0);
    if(string.Compare(name, "txtVejnavn", true) == 0)
    {
      MessageBox.Show("ja det er altså så txtVejnavn textboxen her!");
    } 
  }
}
Avatar billede sovsekoder Nybegynder
29. oktober 2004 - 14:59 #21
og et svar
Avatar billede fynbo Nybegynder
29. oktober 2004 - 15:08 #22
og én ting til.. kan man submitte en form, når man har kørt dokumentet igennem?
Avatar billede sovsekoder Nybegynder
29. oktober 2004 - 15:55 #23
ja det vil jeg regne med.. jeg er egentlig ikke webudvikler, men er submit ikke en request på en side hvor man giver parametre med, ala:

www.somewebpage.com/submit?variable=simon&variabel2=knud&osvosvosv

så hvis funktionaliteten er på websiden som du loader så brude det virke (vel og mærke hvis din webside ligger på "webben".
ellers må du lave noget specielt
Avatar billede sovsekoder Nybegynder
29. oktober 2004 - 15:56 #24
så hvis din hjemmesiden ligger lokalt på din harddisk og du gerne vil submitte til en eller anden webside på det storeinternet. Så skal du nok selv bygge din submit streng og så submitte den når der trykkes på en knap
Avatar billede fynbo Nybegynder
01. november 2004 - 11:02 #25
hvordan søger jeg så i framen?
Avatar billede sovsekoder Nybegynder
01. november 2004 - 11:06 #26
ved at bruge det dokument du får ud af window:
IHTMLWindow2 window = htmlDoc.frames.item(ref name) as IHTMLWindow2;
IHTMLDocument2 frameDoc = window.document
Avatar billede fynbo Nybegynder
01. november 2004 - 11:07 #27
wow, du er hurtig til at svare!!!!

Opretter lige et spørgsmål med ekstra point!
Avatar billede fynbo Nybegynder
01. november 2004 - 11:07 #28
Avatar billede fynbo Nybegynder
01. november 2004 - 11:09 #29
Hvad laver du egentlig til dagligt?
Avatar billede sovsekoder Nybegynder
01. november 2004 - 11:25 #30
Programmerer (nu i C# .NET, men også i c/c++ og lidt i vb og java osvosv) - men har tilfældigvis lavet et program hvor jeg bruge webrowser komponenten (hvis det undrer dig at jeg ved noget om den :D)
Avatar billede fynbo Nybegynder
01. november 2004 - 12:02 #31
okay!

Nu har afprøvet programmet på en Windows NT 4 maskine, og det fungere lige indtil den skal bruge microsoft.mshtml

Hvordan får jeg den med over til nt4?
Avatar billede sovsekoder Nybegynder
01. november 2004 - 12:18 #32
har du kopieret Microsoft.mshtml.dll, med over (det er interop filen til msdhtml.dll) den ligger i dit project-targetdir. filen skal ligge i samme dir som dit program ellers skal den tilføjes gac'en
Avatar billede fynbo Nybegynder
01. november 2004 - 12:21 #33
Hvordan gør jeg det?

Er lige startet på C#, er vant til VB og PHP :/
Avatar billede sovsekoder Nybegynder
01. november 2004 - 12:24 #34
hvis du går ind på harddisken der hvor dit program ligger, så går du ind i:

.\bin\debug\

her ligger din .exe fil sammen med de dll'er den er afhængig af. Alle filer skal kopieres, hvis programmet skal bruges på en anden computer end den dui udvikler på...
Avatar billede fynbo Nybegynder
01. november 2004 - 12:25 #35
der ligger den nemlig ikke, kiggede. Jeg har under indstillinger for MSHTML sagt Copy Local = True, prøver lige om det hjælper.

Hvis ikke det hjælper, hvor ligger filen ellers?
Avatar billede sovsekoder Nybegynder
01. november 2004 - 12:27 #36
(en af dll'erne vil være microsoft.mshtml.dll). Eller husker jeg forkert?! måske er den allerede added til gac'en på din computer -> og så vil den ikke ligger der. Så skal du hente filen inde i visual installations dir'et, i en mappe der hedder primaryinterops (kan ikke lige præcist huske hvor den er)
Avatar billede fynbo Nybegynder
01. november 2004 - 12:29 #37
jep, fandt det selv :)

prøver lige!.. utrolig så mange gange du får sparet mig for flere timers frustration :)
Avatar billede sovsekoder Nybegynder
01. november 2004 - 12:31 #38
lol :) - til gavn for andre ligger den i (C:\Program Files\Microsoft.NET\Primary Interop Assemblies)
Avatar billede fynbo Nybegynder
02. november 2004 - 13:23 #39
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester