Diskuze: ovládánícontrol prvků na stránce webového prohlížeče programem, místo uživatelem
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Tvůrce

Zobrazeno 10 zpráv z 10.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Díky za tip. Zkusím nastudovat a zaintegrovat do programu. Potřebuji se vlastně dostat hlavně přes "automatické" přihlášení. Program píšu ve Visual expres 2015 a používám standardní webbrouser.
Pokud nejde o nějakou složitou automatizaci, tak by se to možná dalo řešit nějakou takovouhle cestou, ne?
private void AutoLogin()
{
// Inicializace WebBrowseru
WebBrowser webBrowserForLogin = new WebBrowser();
// Vyvolání události po načtení celého dokumentu
webBrowserForLogin.DocumentCompleted += new webBrowserDocumentCompletedEventHandler(LogIn);
// Nastavení url pro načtení dokumentu
webBrowserForLogin.Url = new Uri("http://www.neco.cz");
}
private void Login(object sender, WebBrowserDocumentCompletedEventArgs e)
{
WebBrowser webBrowser = (WebBrowser)sender;
// Z html dokumentu vyber element s id Name a nastav hodnotu na Franta
webBrowser.Document.GetElementById("Name").SetAttribute("value", "Franta");
// Z html dokumentu vyber element s id password a nastav hodnotu na tajneheslo
webBrowser.Document.GetElementById("password").SetAttribute("value", "tajneheslo");
// Z html dokumentu vyber tlačítko s id Submit a klikni na něj
webBrowser.Document.GetElementById("Submit").InvokeMember("click");
}
Ahoj,
Díky za tip, zkusil jsem a funguje skvěle, ale jenom na www, stránce, ze
které jsem pomáhal kamárádovi automatizovaně stáhnout nějaké obchodní
údaje do Excellu. Tam kde jsem to chtěl použít, tak tam jsem si nabil hubu.
Zkoušel jsem SeleniumWebDriver, ale smál se mi že žádný takový prvek
nenašel, i když jsem šel podle "textu". Stránka nejde uložit. Když jsem
programem uložil "body", tak jsem obdržel toto a nic
víc:"System.Windows.Forms.HtmlElement". Zatím nechápu na základě čeho
to browser zoobrazí a jak se tady vyvolá dálší akce, i kdyby to byl script
tak něco jej musí spustit.
Pro zajímavost si mužeš zkusit "http://www.adolor.cz/admin"
Pokuď mne někdo víc vzdělá budu vděčen.
Ď
Na tom odkaze se ale používá kontrola přístupu pomocí htaccess, proto
se logicky nenajde žádný element jelikož se žádné html generování ani
nekoná dokud není správně vyplněné a odeslané přihlášení.
V takovém případě je potřeba poslat autentikaci už v http hlavičce.
Řešení by mohlo vypadat následovně:
private void button1_Click(object sender, EventArgs e)
{
byte[] authData = Encoding.UTF8.GetBytes("jmeno:supertajneheslo");
string authHeader = "Authorization: Basic " + Convert.ToBase64String(authData) + "\r\n";
webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(LogIn);
webBrowser1.Navigate("http://neco.cz", "", null, authHeader);
}
private void LogIn(object sender, WebBrowserDocumentCompletedEventArgs e)
{
WebBrowser webBrowser = (WebBrowser)sender;
// Zpracování po načtení celé stránky
}
Jsi borec. Vyřešeno.
Víš já jsem hodně starý vlk a programuji asi déle, než ty žiješ. Dřív
byl větší problém to "vyřešit" dnes je spíš problém jak spustit to co
je vyřešeno.
Stejně ale nechápu na základě čeho vygeneruje webbrouser to okno, kam bych
měl ručně vložit "logon" a "password". To musí mít na to každý
prohlížeč kromě "html" souborů i "odbočku" pro případy htaccess nebo
něco podobného. Je to tak ?
Jinak moc díky. Hodně jsem se přiučil a získal podněty k tomu co se mám
ještě trochu doučit.
Tak já jen nekousavě starého vlka poučím, že je slušnost označit zde
řešení. Stačí kliknout na tu modrou fajfku co se objeví vedle příspěvku
když na něj najedeš myší
Promiň asi jsem clikl na nesprávné místo, mělo to být asi na tvou
odpověď a ne na mé poděkování.
Dík.
Rád sem pomohl.
S tím prohlížečem se to má nějak tak že html, css, js jsou jazyky jež
prohlížeči popíší co a jak se má vykreslit a provést na zobrazovaném
dokumentu (www stránce), nicméně prohlížeč musí umět také tato data
nějakým způsobem dostat od serveru, to znamená, že musí umět komunikovat
pomocí nějakého protokolu se samotným serverem a samozřejmě i reagovat na
požadavky serveru.
V tomhle případě je to http protokol a prohlížeč reaguje na http kódy,
konkrétně na kód 401 Authorization Required, vyžádáním přihlašovacích
údajů od uživatele. Přihlašovací dialog co se zobrazí není součástí
webové stránky, ale je to programový dialog (je součástí uživatelského
rozhraní prohlížeče).
Komunikace je asi následující (hodně zjednodušeně):
V programu z předchozího postu vycházíme z toho, že známe adresu dokumentu/stránky a víme předem, že vyžaduje přihlášení, proto můžeme přeskočit úvodní http komunikaci (body 1 a 2) , potlačit interakci s uživatelem (body 3 a 4) a přejít rovnou k bodu 5, kdy už posíláme požadavek na dokument včetně autorizace.
Program se dá pak samozřejmě upravit tak, že pokud nedostane od serveru http hlavičku 401, počká na událost DocumentCompleted, vyhledá ve stránce elementy přihlašovacího formuláře, ty vyplní a odešle formulář tak jak sem ukazoval v prvním kódu. Tím bude možnost využít oba způsoby přihlášení.
Zobrazeno 10 zpráv z 10.