Válí se ti projekty v šuplíku? Dostaň je mezi lidi a získej cool tričko a body na profi IT kurzy v soutěži ITnetwork summer 2017!
Přidej si svou IT školu do profilu a najdi spolužáky zde na síti :)
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
Odpovídá na Danik
Petr Čech (czubehead):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
Why so serious? -Joker
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
Nesnáším {}, proto se jim vyhýbám.
Avatar
Odpovídá na Danik
Petr Čech (czubehead):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
Why so serious? -Joker
Avatar
Insane Qurd
Redaktor
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.