Llenar campos en pagina web

Iniciado por rigorvzla, 23 Mayo 2019, 04:59 AM

0 Miembros y 2 Visitantes están viendo este tema.

rigorvzla

listo muuuchas gracias, a probar jeje

rigorvzla

#11
Hola de nuevo, estoy de nuevo por aqui , buscando una ayuda a lo siguiente, como menciono el amigo elektro Selenium a grandes escalas es un overkill rotundo, viendo eso empece a buscar informacion sobre su recomendacion,  
clase HttpWebRequest / WebRequest.

resulta que encontre gran cantidad de ejemplos los cuales empiezo apenas a entender, trate de recrear en c# el codigo de elektro y no pude hacerlo funcionar para loguearme aqui.

mi pregunta es, deacuerdo a los ejemplos que consegui, como puedo obtener el enlace web para que con un Process.Start() lo pueda ejecutar?

Ejemplo 1:
       private static void Metodo1()
       {
           const string baseurl = "https://foro.elhacker.net/index.php?action=login2";
           string user = "Usuario";
           string password = "Clave";
           HttpWebRequest req = (HttpWebRequest)WebRequest.Create(baseurl);
           CookieContainer cookie;
           req.Method = "POST";
           req.ContentType = "application/x-www-form-urlencoded";
           string login = string.Format("go=&Fuser={0}&Fpass={1}", user, password);
           byte[] postbuf = Encoding.ASCII.GetBytes(login);
           req.ContentLength = postbuf.Length;
           Stream rs = req.GetRequestStream();
           rs.Write(postbuf, 0, postbuf.Length);
           rs.Close();

           cookie = req.CookieContainer = new CookieContainer();

           WebResponse resp = req.GetResponse();
           resp.Close();
       }


Ejemplo 2:
public class CookieAwareWebClient : WebClient
   {
       public void Login(string loginPageAddress, NameValueCollection loginData)
       {
           CookieContainer container;

           var request = (HttpWebRequest)WebRequest.Create(loginPageAddress);

           request.Method = "POST";
           request.ContentType = "application/x-www-form-urlencoded";

           var query = string.Join("&",
             loginData.Cast<string>().Select(key => $"{key}={loginData[key]}"));

           var buffer = Encoding.ASCII.GetBytes(query);
           request.ContentLength = buffer.Length;
           var requestStream = request.GetRequestStream();
           requestStream.Write(buffer, 0, buffer.Length);
           requestStream.Close();

           container = request.CookieContainer = new CookieContainer();

           var response = request.GetResponse();
           response.Close();
           CookieContainer = container;
       }

       public CookieAwareWebClient(CookieContainer container)
       {
           CookieContainer = container;
       }

       public CookieAwareWebClient()
         : this(new CookieContainer())
       { }

       public CookieContainer CookieContainer { get; private set; }

       protected override WebRequest GetWebRequest(Uri address)
       {
           var request = (HttpWebRequest)base.GetWebRequest(address);
           request.CookieContainer = CookieContainer;
           return request;
       }

       public static void Start()
       {
           var loginAddress = "https://foro.elhacker.net/index.php?action=login2";
           var loginData = new NameValueCollection
           {
             { "username", "Usuario" },
             { "password", "Clave" }
           };

           var client = new CookieAwareWebClient();
           client.Login(loginAddress, loginData);
       }
   }


Ejemplo 3:
 public static CookieContainer Login()
       {
           string userName = "Usuario";
           string password = "Clave";

           ASCIIEncoding encoding = new ASCIIEncoding();
           string postData = "Username=" + userName + "&Password=" + password;
           byte[] postDataBytes = encoding.GetBytes(postData);

           HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create("https://foro.elhacker.net/index.php?action=login2");

           httpWebRequest.Method = "POST";
           httpWebRequest.ContentType = "application/x-www-form-urlencoded";
           httpWebRequest.ContentLength = postDataBytes.Length;
           httpWebRequest.AllowAutoRedirect = false;

           using (var stream = httpWebRequest.GetRequestStream())
           {
               stream.Write(postDataBytes, 0, postDataBytes.Length);
               stream.Close();
           }

           var cookieContainer = new CookieContainer();

           using (var httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse())
           {
               using (var streamReader = new StreamReader(httpWebResponse.GetResponseStream()))
               {
                   foreach (Cookie cookie in httpWebResponse.Cookies)
                   {
                       cookieContainer.Add(cookie);
                   }
               }
           }

           return cookieContainer;
       }


Ejemplo 4:
   public class CookieAwareWebClient : WebClient
   {
       public CookieContainer CookieContainer { get; private set; }

       public CookieAwareWebClient()
         : this(new CookieContainer())
       { }

       public CookieAwareWebClient(CookieContainer container)
       {
           CookieContainer = container;
       }


       public bool Login(string loginPageAddress, NameValueCollection loginData)
       {
           var request = (HttpWebRequest)WebRequest.Create(loginPageAddress);

           request.Method = "POST";
           request.ContentType = "application/x-www-form-urlencoded";
           request.UserAgent = "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.69 Safari/537.36";

           var parameters = new StringBuilder();
           foreach (string key in loginData.Keys)
           {
               parameters.AppendFormat("{0}={1}&",
                   HttpUtility.UrlEncode(key),
                   HttpUtility.UrlEncode(loginData[key]));
           }
           parameters.Length -= 1;

           var buffer = Encoding.ASCII.GetBytes(parameters.ToString());
           request.ContentLength = buffer.Length;

           var requestStream = request.GetRequestStream();
           requestStream.Write(buffer, 0, buffer.Length);
           requestStream.Close();

           request.CookieContainer = new CookieContainer();

           var response = (HttpWebResponse)request.GetResponse();
           response.Close();

           CookieContainer = request.CookieContainer;
           return response.StatusCode == HttpStatusCode.OK;
       }

       Add cookies to WebRequest
       protected override WebRequest GetWebRequest(Uri address)
       {
           var request = (HttpWebRequest)base.GetWebRequest(address);
           request.UserAgent = "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.69 Safari/537.36";
           request.CookieContainer = CookieContainer;
           return request;
       }
   }
   public class FacebookClient : CookieAwareWebClient
   {
       public bool Login(string email, string password)
       {
           var loginResult = this.Login("https://foro.elhacker.net/index.php?action=login2",
           new NameValueCollection
           {
         { "Usuario", email },
         { "Clave", password }
           });

           return loginResult;
       }

       public void GetHomePage()
       {
           Here's the magic.. Cookies are injected via an overriden
           var webRequest = GetWebRequest(new Uri("http://elhacker.net/"));

           string src = "";
           using (var webResponse = (HttpWebResponse)webRequest.GetResponse())
           {
               src = new StreamReader(webResponse.GetResponseStream()).ReadToEnd();
           }
       }
   }


Ejemplo Elektro C#:
// ***********************************************************************
// Author   : ElektroStudios
// Modified : 28-February-2018
// ***********************************************************************



// New()



// CookiesEnabled As Boolean
// Cookies As CookieContainer
// Timeout As Integer




using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Security;
using System.Text;
using System.Threading.Tasks;
using Microsoft.VisualBasic;
using System.ComponentModel;
using System.Drawing;
using System.Net;
using System.Runtime.InteropServices;
using System.Web;

namespace TestProject.DevCase.Core.NET
{

    /// ----------------------------------------------------------------------------------------------------
    ///         ''' <summary>
    ///         ''' A extended <see cref="WebClient"/> component, with support for cookies and requests timeout.
    ///         ''' </summary>
    ///         ''' ----------------------------------------------------------------------------------------------------
    ///         ''' <remarks>
    ///         ''' Original idea taken from: http://www.codingvision.net/tips-and-tricks/c-webclient-with-cookies
    ///         ''' </remarks>
    ///         ''' ----------------------------------------------------------------------------------------------------
    [DisplayName(nameof(DevWebClient))]
    [Description("A extended WebClient component, with support for cookies and requests timeout.")]
    [DesignTimeVisible(false)]
    [DesignerCategory(nameof(DesignerCategoryAttribute.Component))]
    //[ToolboxBitmap(typeof(Component), "Component.bmp")]
    [ToolboxItemFilter("System.Windows.Forms", ToolboxItemFilterType.Allow)]
    [ComVisible(true)]
    public class DevWebClient : WebClient
    {


        /// ----------------------------------------------------------------------------------------------------
        ///             ''' <summary>
        ///             ''' Gets or sets a value indicating whether cookies are enabled.
        ///             ''' <para></para>
        ///             ''' Default value is <see langword="False"/>.
        ///             ''' </summary>
        ///             ''' ----------------------------------------------------------------------------------------------------
        ///             ''' <value>
        ///             ''' <see langword="True"/> if cookies are enabled; otherwise, <see langword="False"/>.
        ///             ''' </value>
        ///             ''' ----------------------------------------------------------------------------------------------------
        public bool CookiesEnabled { get; set; }

        /// ----------------------------------------------------------------------------------------------------
        ///             ''' <summary>
        ///             ''' Gets or sets the cookies associated with this <see cref="DevWebClient"/>.
        ///             ''' </summary>
        ///             ''' ----------------------------------------------------------------------------------------------------
        ///             ''' <value>
        ///             ''' The cookies associated with this <see cref="DevWebClient"/>.
        ///             ''' </value>
        ///             ''' ----------------------------------------------------------------------------------------------------
        public CookieContainer Cookies { get; set; }

        /// ----------------------------------------------------------------------------------------------------
        ///             ''' <summary>
        ///             ''' Gets or sets the time interval, in milliseconds, until the
        ///             ''' requests made by this <see cref="DevWebClient"/> times out.
        ///             ''' </summary>
        ///             ''' ----------------------------------------------------------------------------------------------------
        ///             ''' <value>
        ///             ''' The time interval, in milliseconds, until the
        ///             ''' requests made by this <see cref="DevWebClient"/> times out,
        ///             ''' or <see cref="Global.System.Threading.Timeout.Infinite"/> to indicate that the
        ///             ''' request does not time out.
        ///             ''' </value>
        ///             ''' ----------------------------------------------------------------------------------------------------
        public int Timeout { get; set; } = global::System.Threading.Timeout.Infinite;



        /// ----------------------------------------------------------------------------------------------------
        ///             ''' <summary>
        ///             ''' Initializes a new instance of the <see cref="DevWebClient"/> class.
        ///             ''' </summary>
        ///             ''' ----------------------------------------------------------------------------------------------------
        public DevWebClient()
        {
            this.Cookies = new CookieContainer();
        }



        /// ----------------------------------------------------------------------------------------------------
        ///             ''' <summary>
        ///             ''' Returns a <see cref="WebRequest"/> object for the specified resource.
        ///             ''' </summary>
        ///             ''' ----------------------------------------------------------------------------------------------------
        ///             ''' <param name="address">
        ///             ''' A <see cref="Uri"/> that identifies the resource to request.
        ///             ''' </param>
        ///             ''' ----------------------------------------------------------------------------------------------------
        ///             ''' <returns>
        ///             ''' A new <see cref="WebRequest"/> object for the specified resource.
        ///             ''' </returns>
        ///             ''' ----------------------------------------------------------------------------------------------------
        protected override WebRequest GetWebRequest(Uri address)
        {
            WebRequest request = base.GetWebRequest(address);
            request.Timeout = this.Timeout;

            if ((this.CookiesEnabled) && (request is HttpWebRequest))
                (HttpWebRequest)request.CookieContainer = this.Cookies;

            return request;
        }
        public static void start()
        {
            Uri uri = new Uri("https://foro.elhacker.net/index.php?action=login2", UriKind.Absolute);
            NetworkCredential cred = new NetworkCredential("NOMBRE", "CONTRASEÑA");
            string query = HttpUtility.ParseQueryString($"cookielength=90&user={cred.UserName}&password={cred.Password}").ToString();

            using (DevWebClient client = new DevWebClient() { CookiesEnabled = true })
            {
                client.Headers.Add(HttpRequestHeader.ContentType, "application/x-www-form-urlencoded");

                string response = client.UploadString(uri, "POST", query);
                Console.WriteLine(response);
            }
        }
    }
}




Siento que ahi tengo la respuesta, mas no la logro ver por no saber que busco realmente, espero puedan explicarme y ayudarme aprender y poder resolver este problema.

Replanteo lo que quiero lograr, quiero que en la pagina de login ya sea: facebook, elhacker, hotmail etc... (cualquier web con login)
pueda ingresar los datos (usuario y clave) para que al abrir el navegador solo dirija a la pagina luego del login osea : bandeja de entrada, pagina de inicio de facebook o lo que siga luego del login.

Entendi lo que me explicastes inicialmente elektro de q el usuario no debe ver si no es necesario lo q se hace, solamente se debe mostrar el resultado, en este caso lo siguiente a la pagina de login.

Agradezco la ayuda que puedan darme

Eleкtro

#12
Cita de: rigorvzla en 29 Mayo 2019, 18:36 PM
quiero que en la pagina de login ya sea: facebook, elhacker, hotmail etc... (cualquier web con login)
pueda ingresar los datos (usuario y clave) para que al abrir el navegador solo dirija a la pagina luego del login osea : bandeja de entrada, pagina de inicio de facebook o lo que siga luego del login.

Entendi lo que me explicastes inicialmente elektro de q el usuario no debe ver si no es necesario lo q se hace, solamente se debe mostrar el resultado, en este caso lo siguiente a la pagina de login.

Imagino que con alguno de esos ejemplos ya eres capaz de logearte en la página deseada y obtener la cookie?.

Luego, tan solo tienes que llamar a la función de Windows InternetSetCookieEx para "registrar" dicha cookie de manera temporal durante el tiempo de vida de tu programa (o de manera persistente también puedes, según quieras), y por último llamar al método WebBrowser.Navigate para mostrar la página post-login.

Cualquier conversor de VB.NET a C# debería ser capaz de traducir el siguiente código sin problemas...

Código (vbnet) [Seleccionar]

public class DevWebBrowser : inherits webbrowser

       ''' ----------------------------------------------------------------------------------------------------
       ''' <summary>
       ''' Navigates to the specified url.
       ''' </summary>
       ''' ----------------------------------------------------------------------------------------------------
       ''' <param name="url">
       ''' The url to navigate.
       ''' </param>
       '''
       ''' <param name="newWindow">
       ''' Indicates whether the url should be open into a new browser window.
       ''' </param>
       '''
       ''' <param name="cookies">
       ''' The cookies to set for the specified url.
       ''' </param>
       ''' ----------------------------------------------------------------------------------------------------
       <DebuggerStepThrough>
       <EditorBrowsable(EditorBrowsableState.Always)>
       Public Overloads Sub Navigate(ByVal url As String, ByVal newWindow As Boolean, ByVal cookies As CookieCollection)

           WebUtil.SetCookies(url, False, cookies)
           MyBase.Navigate(url, newWindow)

       End Sub

end class


+

Código (vbnet) [Seleccionar]

public notinheritable class WebUtil

private sub new()
end sub

''' ----------------------------------------------------------------------------------------------------
   ''' <summary>
   ''' Sets one or more cookies for the specified URL.
   ''' </summary>
   ''' ----------------------------------------------------------------------------------------------------
   ''' <param name="url">
   ''' The URL.
   ''' </param>
   '''
   ''' <param name="persistent">
   ''' A value that indicates the cookie persistance.
   ''' <para></para>
   ''' If set to <see langword="True"/> (persistent), the cookie is set in the operating system cache.
   ''' <para></para>
   ''' If set to <see langword="False"/> (non-persistent), the cookie is only set for the life-time of the current process.
   ''' </param>
   '''
   ''' <param name="cookies">
   ''' The cookies to set.
   ''' </param>
   ''' ----------------------------------------------------------------------------------------------------
   <DebuggerStepThrough>
   Public Shared Sub SetCookies(ByVal url As String, ByVal persistent As Boolean, ByVal cookies As CookieCollection)

       For Each cookie As Cookie In cookies
           If (persistent) Then
               Dim cookieData As String = $"{cookie.ToString()}; expires = {cookie.Expires.ToUniversalTime().ToString("ddd, dd-MMM-yyyy HH:mm:ss", CultureInfo.InvariantCulture.DateTimeFormat)} GMT"
               If (NativeMethods.InternetSetCookieEx(url, Nothing, cookieData, 0, IntPtr.Zero) = 0) Then
                   Throw New Win32Exception(Marshal.GetLastWin32Error())
               End If

           Else
               If (NativeMethods.InternetSetCookieEx(url, cookie.Name, cookie.Value, 0, IntPtr.Zero) = 0) Then
                   Throw New Win32Exception(Marshal.GetLastWin32Error())
               End If

           End If

       Next cookie

   End Sub

end class


+

Código (vbnet) [Seleccionar]
friend notinheritable class NativeMethods

private sub new()
end sub

   ''' ----------------------------------------------------------------------------------------------------
   ''' <summary>
   ''' Creates a cookie with a specified name that is associated with a specified URL.
   ''' <para></para>
   ''' This function differs from the <see cref="NativeMethods.InternetSetCookie"/> function by being able to create third-party cookies
   ''' </summary>
   ''' ----------------------------------------------------------------------------------------------------
   ''' <remarks>
   ''' <see href="https://docs.microsoft.com/en-us/windows/desktop/api/wininet/nf-wininet-internetsetcookiea"/>
   ''' </remarks>
   ''' ----------------------------------------------------------------------------------------------------
   ''' <param name="urlName">
   ''' The URL for which the cookie should be set.
   ''' </param>
   '''
   ''' <param name="cookieName">
   ''' The name to be associated with the cookie data. If this parameter is <see langword="Nothing"/>, no name is associated with the cookie.
   ''' </param>
   '''
   ''' <param name="cookieData">
   ''' Actual data to be associated with the URL.
   ''' </param>
   '''
   ''' <param name="flags">
   ''' Flags that control how the function retrieves cookie data:.
   ''' </param>
   '''
   ''' <param name="reserved">
   ''' <see cref="IntPtr.Zero"/>, or contains a pointer to a Platform-for-Privacy-Protection (P3P) header to be associated with the cookie.
   ''' </param>
   ''' ----------------------------------------------------------------------------------------------------
   ''' <returns>
   ''' Returns a member of the InternetCookieState enumeration if successful, or zero (0) otherwise.
   ''' </returns>
   ''' ----------------------------------------------------------------------------------------------------
   <DllImport("WinINET.dll", SetLastError:=True, CharSet:=CharSet.Auto, BestFitMapping:=False, ThrowOnUnmappableChar:=True)>
   friend Shared Function InternetSetCookieEx(ByVal urlName As String,
                                              ByVal cookieName As String,
                                              ByVal cookieData As String,
                                              ByVal flags As Integer,
                                              ByVal reserved As IntPtr
   ) As <MarshalAs(UnmanagedType.I4)> Integer
   End Function

end class


Ejemplo de como usar todo eso:

Código (vbnet) [Seleccionar]
'This is a code example that demonstrates how to login to a website,
'and navigate to the page using the cookie that contains the login data.

Dim uri As New Uri("https://foro.elhacker.net/index.php?action=login2", UriKind.Absolute)
Dim cred As New NetworkCredential("USERNAME", "PASSWORD")
Dim query As String = HttpUtility.ParseQueryString($"cookielength=90&amp;user={cred.UserName}&amp;passwrd={cred.Password}").ToString()

Using client As New DevWebClient() With {.CookiesEnabled = True}
   client.Headers.Add(HttpRequestHeader.ContentType, "application/x-www-form-urlencoded")

   Dim response As String = client.UploadString(uri, "POST", query)
   Console.WriteLine(response)

   Dim cookies As CookieCollection = client.CookieContainer.GetCookies(uri)
   DevWebBrowser1.Navigate("https://foro.elhacker.net", cookies)
End Using


...creo que no me faltó por compartir ningún miembro. La clase DevWebClient la compartí en un comentario de la primera página.




EDITO:

He visto muy de reojo los ejemplos que has puesto con la url de foro.elhacker.net, y los nombres de los parámetros están mal. Se llaman "user" y "passwrd" (sin la "o") tal y como puse en mis ejemplos. No "username", ni "usuario", ni "pass" ni "password" ni "clave" ni... en fin. No se hasta que punto entiendes lo que estás haciendo mal.

Saludos.








rigorvzla

Hola nuevamente , estoy por aqui , por lo siguiente, ya ha pasado bastante tiempo desde el post y eh logrado y a aprender un poco mas, del uso de esta clase.
tanto asi que ya obtengo el dato que necesito para poder loguearme en esta web, lo que un no se donde sacar o buscar es lo siguiente.

1.-La pagina de login de otras webs, por ejemplo (facebook) por ejemplo
2.-como puedo convertir ese resultado en un "algo" para poder ejecutar como un process, y asi abrirlo en cualquier explorador web (firefox) por ejemplo.

el codigo implementado es este

  private static readonly HttpClient client = new HttpClient();
        public static async System.Threading.Tasks.Task Main()
        {
            var values = new Dictionary<string, string>
            {
               { "user", "miusuario" },
              { "passwrd", "miclave" }
            };

            var content = new FormUrlEncodedContent(values);

            var response = await client.PostAsync("https://foro.elhacker.net/index.php?action=login2", content);

            var responseString = await response.Content.ReadAsStringAsync();

            responseString = await client.GetStringAsync("https://foro.elhacker.net/index.php?action=login2");

           * Process.Start(responseString); //no sirve

        }


ahora como logre saber que si funciona, de la siguiente manera.
puse un punto de interrupcion en process.start y al llegar ahi, observe los datos del responseString, lo abri o visualice como HTML y WALLA!!! ahi estaba en la pagina logeada mas no se ahora como hacerlo en un explorador web ,externo.

Espero puedan ayudarme con esto y agradezco la ayuda prestada.

ThunderCls

Cita de: rigorvzla en  7 Abril 2020, 01:04 AM
observe los datos del responseString, lo abri o visualice como HTML y WALLA!!! ahi estaba en la pagina logeada mas no se ahora como hacerlo en un explorador web ,externo.

Lo que obtienes en el responseString es simplemente el HTML que te ha retornado el servidor, no se que pretendes que suceda al hacer un Proces.Start("HTML"), pero estoy seguro que no es lo que piensas, que imagino sea ejecutar un navegador web con el HTML renderizado. A ver, lo que te explico Eleкtro en su ultimo post es lo que debes hacer si quieres "abrir" dicho html con la sesion iniciada en un navegador dentro de tu aplicacion. Una vez has hecho las peticiones de inicio de sesion y estas dentro necesitas insertar las cookies obtenidas dentro del componente y lanzar la URL, es todo.
Por otra parte si lo que buscas es lanzar una instancia de un navegador externo como firefox o chrome entonces vas a necesitar hacer el mismo procedimiento lo que en este caso no se me ocurre otra opcion para inyectar las cookies que no sea a traves de un WebDriver/Selenium

Saludos
-[ "...I can only show you the door. You're the one that has to walk through it." – Morpheus (The Matrix) ]-
http://reversec0de.wordpress.com
https://github.com/ThunderCls/