Olen tässä väsäämässä automaattisurffausohjelmaa. Tarkotus olisi siis kirjottaa tekstikenttiin automaattisesti käyttäjänimi, salasana ja painaa kirjaudu nappia. Ne olen onnistunut saamaan ohjelmaan (katso alhaalta). Kirjaudu napilla ei ollut nimeä sähköpostisivun lähdekoodin sisällä, joten jouduin sen taiteilemaan Javascript koodinpätkällä, jonka löysin jostain netin syövereistä. Ongelmana onkin nyt se, että miten pystyy klikkaamaan automaattisesti linkkiä. Seuraava vaihe ohjelmassa on siis se, että kun olen kirjautunut sähköpostiini niin täytyisi klikkaa postilaatikko linkkiä automaattisesti.
HTMLDocument myDoc = new HTMLDocumentClass(); myDoc = (HTMLDocument) axWebBrowser1.Document; //taytetaan kentat HTMLInputElement kayttis = (HTMLInputElement)myDoc.all.item("User.id", 0); HTMLInputElement salis = (HTMLInputElement)myDoc.all.item("User.password", 0); kayttis.value = "omakayttajanimi"; salis.value = "omapassu"; //painetaan kirjaudu-nappia axWebBrowser1.Navigate("javascript:document.forms[0].submit()");
Hm, en ehkä ihan käsitä miten/milloin tuo kirjaudu- napin paino pitäisi tapahtua?
Onnistuuko se koukuttaa johonkin toiseen eventtiin?
Tai jos salis.value haettaisiin propertystä, jolloin
string passu; string Passu { get{ return passu; klikkaa(); } }
Edit: runeberg, mää ymmärsin, että se kirjautuminen onnistui, mutta linkkien painaminen ei...
Eikös tuolla voi vaihtaa nettisivua? luultavasti, ku kerta automaattisurffaajaa oot tekemässä... Eli ideana etsi linkin osoite, aseta se arvoksi sille systeemille, mikä vaihtaa sivua ja sitten vaan vaihdat sen avulla sitä sivua.
Hmm. Johan kuullosti taas epäselvältä, no toivottavasti ymmärsit jotain.
Jos ette ymmärrä ohjelman rakennetta niin tässä on linkki, joka on hyvinkin samanlainen mitä käytän pohjana tällä hetkellä, kun vielä kikkailen ja harjoittelen. Siitä vaan lataatte koneelle jos ei muuta. Käytän siis VisualStudiota jossa on esim kaikki Webbrowser systeemit valmiina.
Juu, mutta toi mun idea oli tosiaan ihan teoreettinen, sillä en kyseistä kieltä osaa...
En nyt tähän hätään löytänyt tuohon ratkaisua, mutta ratkaisu todennäköisesti löytyy mshtml.HTMLLinkElementClass paikkeilta.
Täytyisi vaan keksiä miten impletoida se tuohon, koska hmtllinkelementclass sisältää click() metodin
Tällainen koodi ainakin tulostaa messageboxina jokaisen linkin osoitteen, joka sivulta löytyy. Miten siis pystyn painamaan vaikkapa ensimmäistä linkkiä?
mshtml.HTMLDocumentClass doc = (mshtml.HTMLDocumentClass)axWebBrowser1.Document; foreach (mshtml.IHTMLElement link in doc.links) { MessageBox.Show(link.getAttribute("href", 0).ToString()); }
Jos ei ole olennaista saada sivuja ruudulle vaan vain suorittaa jokin toiminto tai hakea dataa, kannattaa unohtaa kokonaan visuaalinen puoli ja yksinkertaisesti lähettää oikeanlaiset HTTP-pyynnöt palvelimelle. Napit ja linkit ovat vain käyttäjälle suunnattuja apuvälineitä.
no esimerkkinä webbrowser luokasta:
HtmlElementCollection elements = webBrowser1.Document.GetElementsByTagName("INPUT"); foreach(HtmlElement currentElement in elements) { currentElement.InvokeMember("click"); } //Tämä etsii input tagilla olevat ja painaa
vaihtoehtoisesti voi tehdä vaikka pelkästään
WebBrowser1.Document.GetElementsById("tähän_id").InvokeMember("click"); //Yksittäisen elementin painaminen jos id tiedossa
Aihe on jo aika vanha, joten et voi enää vastata siihen.