VB.NET kliknutí na tlačítko bez ID   otázka

VB.NET

Zdravím, mám takový problém.. Dělám aplikaci, která se přihlašuje přes webbrowser na jednu stránku a nevím jak kliknout na tlačítko které nemá ID

<a href="#" onclick="return Index.submit_login('server_cs34');"
<span class="world_button_active">Svět 34</span>
</a>
nahlásit spamnahlásit spam 0 odpovědětodpovědět

to tlačítko je v té Vaší aplikaci, nebo je v té stránce, kam se chcete dostat?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Je v té stránce

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Možná by bylo vhodné dát trochu víc informací...

Tu stránku jste dělal Vy, nebo je cizí? Jakým způsobem se má provádět to "přihlašování na stránku"?

Co se má stát po kliknutí na "to" tlačítko? A další podobné otázky je třeba si předem zodpovědět.

Ptám se proto, že by se to dalo třeba udělat jiným způsobem, ale takhle z toho Vašeho dotazu není zcela jasné, jak by to vlastně mělo fungovat a co by to mělo dělat...

nahlásit spamnahlásit spam 0 odpovědětodpovědět

takže se rozepíši..

Stránku dělali cizí - přesněji se jedná se o stránku www.divokekmeny.cz, přesněji o vybírání serveru. Je tam více tlačítek serverů a já potřebuji vybrat jen to jedno. Po kliknutí na tlačítko se provede přihlášení a přesměrování do účtu..

Zkoušel jsem zmáčknutí tlačítka přes Enter bohužel to nefunguje..

nahlásit spamnahlásit spam 0 odpovědětodpovědět

No bohužel jste se moc nerozepsal. "Je tam více tlačítek serverů" Kde? V nějaké vaší aplikaci o které jste nic nenapsal, nebo na té stránce (tam jsem to ale nenašel).

Chcete to ovládat z nějaké vaší externí "tlusté" aplikace, která bude např. hostovat prohlížeč (WebBrowserControl), ve kterém bude zobrazená tato stránka nebo z nějaké vaší webové aplikace, která na tuto stránku bude provádět HTTP request nebo redirect?

Tu aplikaci již máte?

Co má být výsledkem? Najetý browser s tou stránkou po přihlášení nebo si z ní jen programově chcete něco načíst?

Obecně to (z toho mála co jsem snad pochopil) vypadá na velmi těžký úkol. Principiálně by šlo uvažovat o něčem z následujícího:

1) Řešit to jako klientská aplikace (bez UI), která by měla jen ovládat počítač simulací klávesnice apod. Toto řešení pro tento případ má ale moc externích vlivů (zda běží IE, zda je v něm ta stránka, zda má focus apod.)

2) Řešit to jako "tlustá" aplikace s UI, která hostuje browser, ve kterém se zobrazí ta stránka. Pak by asi šlo do hostovaného browseru posílat klávesnici nebo poslat POST data (jako v případě bodu 4) apod.

3) Injektovat na tu stránku vlastní JavaScript. To je hack, který asi mají na té stránce ošetřen.

4) Provést na své web stránce POST request odpovídající tomu to odesílá tato stránka při přihlášení tj. využít tzv. Cross Site Request Forgery. Proti tomuto typu útoku se autoři té stránky pravděpodobně brání a pokud ne, mohou se kdykoliv v budoucnosti začít bránit. Nicméně to můžete zkusit.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Takže primitivní kód který zatím mám:

Public Class Form1

        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
           
            WebBrowser1.Navigate("www.divokekmeny.cz")
        End Sub

        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            WebBrowser1.Document.All("user").InnerText = "" & TextBox1.Text & ""   
            WebBrowser1.Document.All("password").InnerText = "" & TextBox2.Text & "" 
            WebBrowser1.Document.All("login_submit_button").InvokeMember("click")

Zde jsou obrázky jak to na té stránce vypadá:

http://s17.postimg.org/l2v1vtjtr/DK1.jpg

http://s29.postimg.org/xsk5ndqfr/DK2.jpg

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Můžete zkusit následující:

1) Použít metodu InvokeScript (http://msdn.microsoft.com/en-us/library/... ) a zkusit zavolat přímo tu akci toho tlačítka (Index.submit_login('server_cs34');)

2) Zjistit si jak vypadá struktura DOM dokumentu v ten moment, kdy jsou tam ty tlačítka. Přes WebBrowser1.Document.All vyhledat nějaký nejbližší parent element, který lze jednoznačně určit (podle ID). Použít jeho vlastnost All, Children apod. a na cílový element se již donavigovat podle typu, class nebo pořadí (tento krok bude možná nutné provést na několikrát).

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback