Přepínání mezi odkazy ve WebBrowser   otázka

VB.NET

Dobrý den,

chtěl bych napsat aplikaci pro automatické vyplňování webového formuláře daty získanými ze čtečky čárových kódů.

Prosím o radu, jakou funkci ve VB použít pro přepínání mezi prvky webové stránky. Děkuji.

PK

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

WebBrowser má vlastnost Document, která je typu HtmlDocument. Na HtmlDocumentu budete muset nejdříve dané prvky lokalizovat. To uděláte pomocí GetElementById (v případě, že mají nastavený parametr "id"), nebo GetElementsByTagName a iterovat kolekcí výsledků podle nějakých zadaných kritérií. Každopádně budete závislý na struktuře dokumentu webové stránky a to může radikálně ohrozit stabilitu aplikace.

Jako lepší řešení se mi jeví najít formulář, který chcete odesílat, zjistit všechna potřebná pole a odeslat pouze akci toho formuláře pomocí WebClientu nebo HttpWebRequestu.

Pokud používáte Mozilla Firefox, můžete zjistit potřebná pole a adresu formáláře tak, že otevřete stránku s formuláře, zmáčknete CTRL+SHIFT+K, vyvoláte kontextové menu konzole a zvolíte Log Request and Response Bodies a pak formulář vyplníte a odešlete. Kliknutím na výsledek uvidíte všechno, co potřebujete. To samé jde i v Google Chrome, tam ale po načtení stránky dáte F12 a vyberete záložku Network. Jak to má Windows Internet Explorer či jiné proghlížeče, netuším.

Ve zdrojovém kódu stránky naleznete formulář:

<form action="action.php" method="post">
  <input type="text" name="value"/>
</form>

A sestavíte request. Pokud je metoda GET, stačí poskládat URL takto: action.php?value=něco. Pokud jde o POST, doporučuji použít třeba http://www.hurl.it/ a zkusit si tam napsat (v absolutním formátu, tedy http://... ) adresu té akce a přidat nějaké parametry k otestování. Pokud se Vám povede provést ten požadavek, pak bude stačit kód jako tento:

Using client As New System.Net.WebClient()
  Var result = client.UploadString("http://example.com/action.php", "value=test&value2=test2")
End Using

V proměnné result bude zdrojový kód stránky, ze kterého může být možné určit úspěšnost akce (například vyhledáním nějakého elementu typu <span class="success">Hotovo.</span>, záleží na implementaci stránky).

Také je vhodné poznamenat, že pro fomuláře se by v hlavičce ContentType mělo být následující:

Using client As New WebClient()
  client.Headers(HttpRequestHeader.ContentType) = "application/x-www-form-urlencoded"
  ' client.Upload...

End Using

http://msdn.microsoft.com/en-us/library/... - HtmlDocument na MSDN

http://www.hurl.it - nástroj k ladění webových API

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Děkuji za obsáhlou odpověď.

Abych byl konkrétnější, tak jde o víceméně neměnný webový formulář, jeho autoři už ho nehodlají upravovat. V současnosti do něj vepisujeme ručně zdravotnická data.

Zkoušel jsem www.hurl.it, metoda je POST, ale jako odpověď se mi vrací přihlašovací stránka formuláře. Zkoušel jsem obojí: no auth i basic http, zmíněný web ale běží na https.. Ani zadání přihlašovacích údajů nepomohlo. Napadá Vás něco ? Díky.

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