Avatar
Danik
Člen
Avatar
Danik:

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:

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):

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):

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):

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:

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:

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:

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.