Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C# automaattisurffailu

Sivun loppuun

Javakoodari [06.04.2010 18:55:38]

#

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()");

runeberg [06.04.2010 19:08:50]

#

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();
     }
}

vehkis91 [06.04.2010 19:09:48]

#

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.

Javakoodari [06.04.2010 19:13:24]

#

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.

http://www.codeproject.com/KB/cs/mshtml_automation.aspx

vehkis91 [06.04.2010 19:18:39]

#

Juu, mutta toi mun idea oli tosiaan ihan teoreettinen, sillä en kyseistä kieltä osaa...

runeberg [06.04.2010 19:59:51]

#

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

Javakoodari [06.04.2010 20:08:34]

#

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());

}

Metabolix [06.04.2010 20:38:55]

#

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ä.

groovyb [06.04.2010 22:19:09]

#

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

Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta