Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Danik
Člen
Avatar
Danik:23.11.2014 11:42

Ahoj, je možné v C# naprogramovat malou app, která mi po kliknutí na ní odešle data na stránku, kde je pouze jediný formulář, který vyplní? :) Děkuji.

 
Odpovědět
23.11.2014 11:42
Avatar
Odpovídá na Danik
Michal Štěpánek:23.11.2014 15:09

Jestli jsem to dobře pochopil, chtěl bys z desktop app vyplňovat údaje na nějaké cizí web stránce?
EDIT: Nevím jestli to půjde, ale musel bys minimálně znát názvy jednotlivých textboxů, abys věděl co se kam má vyplnit...

Editováno 23.11.2014 15:10
Nahoru Odpovědět
23.11.2014 15:09
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Petr Čech
Tvůrce
Avatar
Odpovídá na Danik
Petr Čech:23.11.2014 15:22

Máš 2 možnosti:

1. dáš tam nějaký interní webbrowser a pole vyplníš nasměrováním na odkaz

javascript:$('#field1').val('value');document.forms[0].submit();

2. použiješ webclient

Editováno 23.11.2014 15:24
Nahoru Odpovědět
23.11.2014 15:22
the cake is a lie
Avatar
Odpovídá na Danik
Michal Žůrek - misaz:23.11.2014 15:23

ta stránka ten formulář je tvůj?

 
Nahoru Odpovědět
23.11.2014 15:23
Avatar
Petr Čech
Tvůrce
Avatar
Odpovídá na Danik
Petr Čech:23.11.2014 15:33

Co se týče webrequestu...

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using System.IO;
using System.Windows;
using CsQuery;
using System.Net.Http;

namespace Browser
{
    class BrowserCs
    {
        public HttpWebRequest Request { protected set; get; }
        public HttpWebResponse Response { protected set; get; }
        public CookieContainer Cookies { protected set; get; }
        public string DocText { protected set; get; }

        public string Navigate(string url, Dictionary<string, string> args, string method = "GET", Dictionary<string, string> cookies = null)
        {
            if (Cookies == null)
                Cookies = new CookieContainer();

            Request = (HttpWebRequest)WebRequest.Create(url);
            Request.Method = method;
            Request.AllowAutoRedirect = true;

            string data = "";

            if (args.Count > 0)
            {
                data = (method == "GET" ? "?" : "");
                for (int i = 0; i < args.Count; i++)
                {
                    data += WebUtility.UrlEncode(args.ElementAt(i).Key) + "=" + WebUtility.UrlEncode(args.ElementAt(i).Value) + ((i == (args.Count - 1) ? "" : "&"));
                    //data += args.ElementAt(i).Key + "=" + args.ElementAt(i).Value + ((i == (args.Count - 1) ? "" : "&"));
                }
            }

            if (cookies != null)
            {
                try
                {
                    foreach (KeyValuePair<string, string> k in cookies)
                    {
                        string domainTemp = url.Replace("http://", "");
                        string domain = "";
                        for (int i = 0; i < domainTemp.Length; i++)
                        {
                            if (domainTemp[i] == '/')
                                break;
                            else
                                domain += domainTemp[i];
                        }

                        Cookie cookie = new Cookie(k.Key, k.Value, "/", domain);
                        Cookies.Add(cookie);
                    }
                }
                catch (Exception e)
                {
                    MessageBox.Show(e.Message);
                }
            }

            Request.CookieContainer = new CookieContainer();
            foreach (Cookie c in Cookies.GetCookies(new Uri(url)))
            {
                Request.CookieContainer.Add(c);
            }

            if (args.Count > 0)
            {
                byte[] bytes = Encoding.UTF8.GetBytes(data);
                Request.ContentType = "application/x-www-form-urlencoded";
                Request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8";
                Request.ContentLength = bytes.Length;

                Stream stream = Request.GetRequestStream();
                stream.Write(bytes, 0, bytes.Length);
                stream.Close();
            }
            else
            {
                Request.ContentType = "text/html; charset=utf-8";
                Request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8";
            }
            Response = (HttpWebResponse)Request.GetResponse();

            Stream stream1 = Response.GetResponseStream();
            StreamReader reader = new StreamReader(stream1);
            DocText = reader.ReadToEnd();
            Cookies = Request.CookieContainer;

            reader.Close();
            stream1.Close();
            Response.Close();


            return DocText;
        }

        public string Navigate(string url)
        {
            return Navigate(url, new Dictionary<string, string>());
        }

        public void ClearCookies()
        {
            Cookies = new CookieContainer();
        }
    }
}
Editováno 23.11.2014 15:35
Nahoru Odpovědět
23.11.2014 15:33
the cake is a lie
Avatar
Insane Qurd
Tvůrce
Avatar
Odpovídá na Danik
Insane Qurd:23.11.2014 16:24

Nebo také:

webBrowser1.Do­cument.GetEle­mentById("id text inputu").SetAt­tribute("valu­e",text)

Nahoru Odpovědět
23.11.2014 16:24
It's impossible to say it's impossible.
Avatar
Danik
Člen
Avatar
Odpovídá na Michal Žůrek - misaz
Danik:23.11.2014 16:32

Není můj, chtěl bych to kvůli přihlašování do školní sítě. Když zapneš ntb, otevřeš prohlížeč, tak prvně tě to přesměruje na stránku, kde máš 1 jediný formulář, kam vyplníš svoje přihlašovací údaje, a poté už můžeš brouzdat dle libosti. Rád bych si udělal itilitu, která mi otevře prohlížeč a rovnou napíše a potvrdí ten formulář, abych se zbytečně nezdržoval.

 
Nahoru Odpovědět
23.11.2014 16:32
Avatar
Danik
Člen
Avatar
Odpovídá na Michal Štěpánek
Danik:23.11.2014 16:36

Ano, pochopil jsi to správně :) . Však názvy textboxu najdu ve zdrojovém kódu stránky, pokuď vím.

 
Nahoru Odpovědět
23.11.2014 16:36
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 8 zpráv z 8.