elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a la Factorización De Semiprimos (RSA)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  Llenar campos en pagina web
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Llenar campos en pagina web  (Leído 9,212 veces)
rigorvzla

Desconectado Desconectado

Mensajes: 221


Ver Perfil
Llenar campos en pagina web
« en: 23 Mayo 2019, 04:59 am »

Hola a todos, realmente estoy lelo con esto y no se como empezar y ni si es posible, quiero crear una aplicacion en wpf donde al apretar un boton se abra una ventana de google y en el cuadro de busqueda automaticamente se escriba "Hola", y luego de manera automatica empiece la busqueda de eso.

No tengo la menor idea de como llenar, buscar el campo a llenar y bueno es algo que me gustaria aprender hacer para aplicarlo a otras webs ideas.

O si es necesario crear en la misma aplicacion un webbrowser con el que busque en la web lo deseado?.

espero puedan ayudarme.


« Última modificación: 23 Mayo 2019, 05:03 am por rigorvzla » En línea

ThunderCls


Desconectado Desconectado

Mensajes: 455


Coder | Reverser | Gamer


Ver Perfil WWW
Re: Llenar campos en pagina web
« Respuesta #1 en: 23 Mayo 2019, 05:30 am »

Lo que necesitas es Selenium

http://executeautomation.com/blog/simple-code-with-selenium-c/
https://www.guru99.com/selenium-csharp-tutorial.html

Suerte


En línea

-[ "…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/
rigorvzla

Desconectado Desconectado

Mensajes: 221


Ver Perfil
Re: Llenar campos en pagina web
« Respuesta #2 en: 23 Mayo 2019, 07:08 am »

hombre, me ha servido tremendamente, el unico limitante es que se debe tener el google chrome instalado, sacando eso esta de perlas jajaja muuchas gracias compa, aunque si existe otra alternativa a mi problema seria perfecta leerla. Muchas gracias nuevamente
En línea

ThunderCls


Desconectado Desconectado

Mensajes: 455


Coder | Reverser | Gamer


Ver Perfil WWW
Re: Llenar campos en pagina web
« Respuesta #3 en: 23 Mayo 2019, 07:14 am »

IWebDriver es simplemente una interfaz, puedes crear la instancia del navegador que desees:

Código
  1. // NuGet: Selenium.WebDriver.ChromeDriver
  2. using OpenQA.Selenium.Chrome;
  3. IWebDriver driver = new ChromeDriver();
  4. // NuGet: Selenium.Mozilla.Firefox.Webdriver
  5. using OpenQA.Selenium.Firefox;
  6. IWebDriver driver = new FirefoxDriver();
  7. // NuGet: Selenium.WebDriver.PhantomJS
  8. using OpenQA.Selenium.PhantomJS;
  9. IWebDriver driver = new PhantomJSDriver();
  10. // NuGet: Selenium.WebDriver.IEDriver
  11. using OpenQA.Selenium.IE;
  12. IWebDriver driver = new InternetExplorerDriver();
  13. // NuGet: Selenium.WebDriver.EdgeDriver
  14. using OpenQA.Selenium.Edge;
  15. IWebDriver driver = new EdgeDriver();

https://www.automatetheplanet.com/selenium-webdriver-csharp-cheat-sheet/
En línea

-[ "…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/
rigorvzla

Desconectado Desconectado

Mensajes: 221


Ver Perfil
Re: Llenar campos en pagina web
« Respuesta #4 en: 23 Mayo 2019, 07:19 am »

GUAOOOOOO eres un moustruo jajaja ahora todo mi paisaje cambia!!! muchas gracias hombre!! genialisimoooo
En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.878



Ver Perfil
Re: Llenar campos en pagina web
« Respuesta #5 en: 23 Mayo 2019, 12:48 pm »

al apretar un boton se abra una ventana de google y en el cuadro de busqueda automaticamente se escriba "Hola", y luego de manera automatica empiece la busqueda de eso.

No tengo la menor idea de como llenar, buscar el campo a llenar y bueno es algo que me gustaria aprender hacer para aplicarlo a otras webs ideas.

Ese problema parece estar mal planteado, ya que por lo que comentas no parece que realmente quieras automatizar de forma visual/interactiva el navegador, es decir, enviar pulsaciones del teclado para rellenar los campos del form, y pulsar el botón de buscar. Todo eso me resulta completamente innecesario (mal planteado) para lograr lo que parece ser tu objetivo real: mostrar el resultado de una búsqueda de Google en el navegador, y para eso sería suficiente con construir la query de búsqueda de Google y abrir la url en el navegador...

Código
  1. Dim uriBuilder As New UriBuilder With {
  2.    .Scheme = "https",
  3.    .Host = "www.google.com",
  4.    .Path = "search",
  5.    .Query = HttpUtility.ParseQueryString("lr=lang_en&q=Hello World", Encoding.UTF8).ToString()
  6. }
  7.  
  8. WebBrowser1.Navigate(uriBuilder.Uri)

O expresado de forma más simple: https://www.google.com/search?lr=lang_en&q=Hello+World

Tan simple como eso.



De todas formas, y en caso de que por alguna razón que no hayas mencionado realmente necesites automatizar el navegador, en ese caso no necesitas dependencias externas como Selenium o iMacros. Eso es un overkill para lo que pretendes hacer. Es suficiente con lo siguiente:

Código
  1. Dim doc As HtmlDocument = WebBrowser1.Document
  2. Dim searchForm As HtmlElement = doc.Forms(0)
  3. Dim queryTextBox As HtmlElement = doc.GetElementById("q")
  4.  
  5. queryTextBox.SetAttribute("value", "Hello World")
  6. searchForm.InvokeMember("submit")

Nota: el código lo insertarías en el evento DocumentCompleted de la instancia del componente WebBrowser, por ejemplo.

Saludos.
« Última modificación: 23 Mayo 2019, 12:59 pm por Eleкtro » En línea



rigorvzla

Desconectado Desconectado

Mensajes: 221


Ver Perfil
Re: Llenar campos en pagina web
« Respuesta #6 en: 23 Mayo 2019, 15:45 pm »

esto me ha gustado elektro  y bueno en realidad lo necesito para loguear por ejemplo una cuenta ya sea de correo electronico twitter , o cualquier otra pagina web.

coloque google como ejemplo pero al parecer fue muy simple para el problema planteado jeje, por ejemplo  probe el selenium antes de ver tu respuesta y resulto lo que queria con google, mas si de otra manera es posible, seria muy interesante saber, y no eh probado aun con hotmail  por ejemploo twitter o gmail
En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.878



Ver Perfil
Re: Llenar campos en pagina web
« Respuesta #7 en: 24 Mayo 2019, 01:23 am »

probe el selenium antes de ver tu respuesta y resulto lo que queria con google, mas si de otra manera es posible, seria muy interesante saber

Te acabo de mostrar como sería la forma de hacerlo sin Selenium.

En caso de que te estés refiriendo a lo de loguearte, entonces te respondo en la siguiente cita...



en realidad lo necesito para loguear por ejemplo una cuenta ya sea de correo electronico twitter , o cualquier otra pagina web.

De nuevo eso me resulta otro mal planteamiento.

A ver, escúchame bien, por que no se si no lo entiendes, o lo entiendes pero te da igual. El caso es que, siempre y cuando tu NO TENGAS NECESIDAD/PROPÓSITO REAL de abrir el navegador y mostrarle al usuario lo que haces en él, entonces no lo hagas. Es simple, NO PIENSES EN HACERLO ASÍ, por que es una manera innecesaria (y mediocre) de hacer las cosas.

La automatización de navegadores por lo general se usa para fines de pruebas en páginas web. Igual que la tecnología Coded-UI se usa para automatizar aplicaciones con fines de depuración visual.

Otra cosa distinta es que hayan personas y/o programadores que, por no tener conocimiento (o las ganas) de como hacer las cosas de forma apropiada, como sería por ejemplo efectuar una búsqueda en Google, o loguearse en X página, pues recurren a algún framework de automatización como Selenium por que es capaz de hacer estas cosas de forma simple y sencilla. Pero ya te digo, ES INNECESARIO (y cutre, insisto). Donde si que te lo aceptaría, es si estuviesemos hablando de una necesidad real de automatizar, visualmente/interactivamente hablando, un navegador.

¿Quieres hacer las cosas de forma óptima/apropiada, o prefieres quedarte con lo primero que pillas y que ves que te es sencillo y simple de usar?. Tu decides, pero yo solo te diré que para loguearte en un sitio web no necesitas automatizar el navegador para hacer click en "el botón de login". Lo que necesitas es llevar a cabo una petición POST, y hacer uso de cookies. Nada más. Y si quieres algo realmente sencillo entonces puedes usar la clase WebClient, eso sí, despues de haberle implementado el manejo de cookies como en el siguiente ejemplo que te muestro a continuación, el cual es un código extraido de mi librería comercial DevCase for .NET Framework:

Código
  1. ' ***********************************************************************
  2. ' Author   : ElektroStudios
  3. ' Modified : 28-February-2018
  4. ' ***********************************************************************
  5.  
  6. #Region " Public Members Summary "
  7.  
  8. #Region " Constructors "
  9.  
  10. ' New()
  11.  
  12. #End Region
  13.  
  14. #Region " Properties "
  15.  
  16. ' CookiesEnabled As Boolean
  17. ' Cookies As CookieContainer
  18. ' Timeout As Integer
  19.  
  20. #End Region
  21.  
  22. #End Region
  23.  
  24. #Region " Option Statements "
  25.  
  26. Option Strict On
  27. Option Explicit On
  28. Option Infer Off
  29.  
  30. #End Region
  31.  
  32. #Region " Imports "
  33.  
  34. Imports System.ComponentModel
  35. Imports System.Drawing
  36. Imports System.Net
  37. Imports System.Runtime.InteropServices
  38.  
  39. #End Region
  40.  
  41. #Region " DevWebClient "
  42.  
  43. Namespace DevCase.Core.NET
  44.  
  45.    ''' ----------------------------------------------------------------------------------------------------
  46.    ''' <summary>
  47.    ''' A extended <see cref="WebClient"/> component, with support for cookies and requests timeout.
  48.    ''' </summary>
  49.    ''' ----------------------------------------------------------------------------------------------------
  50.    ''' <remarks>
  51.    ''' Original idea taken from: http://www.codingvision.net/tips-and-tricks/c-webclient-with-cookies
  52.    ''' </remarks>
  53.    ''' ----------------------------------------------------------------------------------------------------
  54.    <DisplayName(NameOf(DevWebClient))>
  55.    <Description("A extended WebClient component, with support for cookies and requests timeout.")>
  56.    <DesignTimeVisible(False)>
  57.    <DesignerCategory(NameOf(DesignerCategoryAttribute.Component))>
  58.    <ToolboxBitmap(GetType(Component), "Component.bmp")>
  59.    <ToolboxItemFilter("System.Windows.Forms", ToolboxItemFilterType.Allow)>
  60.    <ComVisible(True)>
  61.    Public Class DevWebClient : Inherits WebClient
  62.  
  63. #Region " Properties "
  64.  
  65.        ''' ----------------------------------------------------------------------------------------------------
  66.        ''' <summary>
  67.        ''' Gets or sets a value indicating whether cookies are enabled.
  68.        ''' <para></para>
  69.        ''' Default value is <see langword="False"/>.
  70.        ''' </summary>
  71.        ''' ----------------------------------------------------------------------------------------------------
  72.        ''' <value>
  73.        ''' <see langword="True"/> if cookies are enabled; otherwise, <see langword="False"/>.
  74.        ''' </value>
  75.        ''' ----------------------------------------------------------------------------------------------------
  76.        Public Property CookiesEnabled As Boolean
  77.  
  78.        ''' ----------------------------------------------------------------------------------------------------
  79.        ''' <summary>
  80.        ''' Gets or sets the cookies associated with this <see cref="DevWebClient"/>.
  81.        ''' </summary>
  82.        ''' ----------------------------------------------------------------------------------------------------
  83.        ''' <value>
  84.        ''' The cookies associated with this <see cref="DevWebClient"/>.
  85.        ''' </value>
  86.        ''' ----------------------------------------------------------------------------------------------------
  87.        Public Property Cookies As CookieContainer
  88.  
  89.        ''' ----------------------------------------------------------------------------------------------------
  90.        ''' <summary>
  91.        ''' Gets or sets the time interval, in milliseconds, until the
  92.        ''' requests made by this <see cref="DevWebClient"/> times out.
  93.        ''' </summary>
  94.        ''' ----------------------------------------------------------------------------------------------------
  95.        ''' <value>
  96.        ''' The time interval, in milliseconds, until the
  97.        ''' requests made by this <see cref="DevWebClient"/> times out,
  98.        ''' or <see cref="Global.System.Threading.Timeout.Infinite"/> to indicate that the
  99.        ''' request does not time out.
  100.        ''' </value>
  101.        ''' ----------------------------------------------------------------------------------------------------
  102.        Public Property Timeout As Integer = Global.System.Threading.Timeout.Infinite
  103.  
  104. #End Region
  105.  
  106. #Region " Constructors "
  107.  
  108.        ''' ----------------------------------------------------------------------------------------------------
  109.        ''' <summary>
  110.        ''' Initializes a new instance of the <see cref="DevWebClient"/> class.
  111.        ''' </summary>
  112.        ''' ----------------------------------------------------------------------------------------------------
  113.        Public Sub New()
  114.            Me.Cookies = New CookieContainer()
  115.        End Sub
  116.  
  117. #End Region
  118.  
  119. #Region " Protected Methods "
  120.  
  121.        ''' ----------------------------------------------------------------------------------------------------
  122.        ''' <summary>
  123.        ''' Returns a <see cref="WebRequest"/> object for the specified resource.
  124.        ''' </summary>
  125.        ''' ----------------------------------------------------------------------------------------------------
  126.        ''' <param name="address">
  127.        ''' A <see cref="Uri"/> that identifies the resource to request.
  128.        ''' </param>
  129.        ''' ----------------------------------------------------------------------------------------------------
  130.        ''' <returns>
  131.        ''' A new <see cref="WebRequest"/> object for the specified resource.
  132.        ''' </returns>
  133.        ''' ----------------------------------------------------------------------------------------------------
  134.        Protected Overrides Function GetWebRequest(ByVal address As Uri) As WebRequest
  135.  
  136.            Dim request As WebRequest = MyBase.GetWebRequest(address)
  137.            request.Timeout = Me.Timeout
  138.  
  139.            If (Me.CookiesEnabled) AndAlso (TypeOf request Is HttpWebRequest) Then
  140.                DirectCast(request, HttpWebRequest).CookieContainer = Me.Cookies
  141.            End If
  142.  
  143.            Return request
  144.  
  145.        End Function
  146.  
  147. #End Region
  148.  
  149.    End Class
  150.  
  151. End Namespace
  152.  
  153. #End Region

Un ejemplo para loguearse en el foro de elhacker.net:
Código
  1. Dim uri As New Uri("https://foro.elhacker.net/index.php?action=login2", UriKind.Absolute)
  2. Dim cred As New NetworkCredential("NOMBRE", "CONTRASEÑA")
  3. Dim query As String = HttpUtility.ParseQueryString($"cookielength=90&user={cred.UserName}&passwrd={cred.Password}").ToString()
  4.  
  5. Using client As New DevWebClient() With {.CookiesEnabled = True}
  6.    client.Headers.Add(HttpRequestHeader.ContentType, "application/x-www-form-urlencoded")
  7.  
  8.    Dim response As String = client.UploadString(uri, "POST", query)
  9.    Console.WriteLine(response)
  10. End Using

La alternativa practicamente equivalente, sería el uso de la clase HttpWebRequest / WebRequest.



y no eh probado aun con hotmail  por ejemploo twitter o gmail

Los servicios más populares proveen una API / librería para .NET Framework, como son casi todos los servicios de Google, y los de Microsoft, incluyendo Outlook / Live. Los de Twitter no tengo ni idea por que nunca he usado esa plataforma...

Así que para loguearte en Gmail y Hotmail es suficiente con usar las librerías para .NET framework de Google y de Microsoft, con los que se puede administrar e-mails y contactos de forma automatizada. Puedes hacer lo que desees, sin tener que lidiar visualmente con la interfaz de un navegador para automatizarlo...

Cabe mencionar que en el caso de Google, algunos servicios son de pago.

PD: por si te lo estás preguntando, si, tengo implementados clientes para loguearse en Live/Hotmail, Gmail y Youtube usando las librerías oficiales para .NET, capaces de llevar a cabo diversas operaciones útiles. Pero eso ya no lo voy a compartir de gratis, que al final nadie me comprará mi duro trabajo. xD

Saludos.
« Última modificación: 24 Mayo 2019, 01:40 am por Eleкtro » En línea



rigorvzla

Desconectado Desconectado

Mensajes: 221


Ver Perfil
Re: Llenar campos en pagina web
« Respuesta #8 en: 24 Mayo 2019, 01:37 am »

ELEKTROOO!!! fantastico hombre y no lo habia hecho , no por q me daba igual, es q no lo entiendo (no es q entienda al 100 el codigo q dejastes) pero lo veo un poco mas claro, si entiendo tu punto y es muy cierto y claro, gracias que cone sto ya tengo madera para cortar.

Gracias!!

Una pregunta es posible que mi planteamiento est mal, pero lo q quiero lograr es , crear una aplicacion donde igrese el correo la contraseña y abra el explorador mostrandome la bandeja de entrada.

Basandome en esto use selenium aparte que fue lo unico que encontre y me recomendaron para lograr mi cometido, por otro lado quede a la espera de una solucion diferente y aqui tu gran explicacion. que no es necesario tal cosa, buscare una web para convertir tu codigo a wpf C# y me pondre a estudiar todo lo que explicastes gracias como siempre dando en el clavo. jeje
En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.878



Ver Perfil
Re: Llenar campos en pagina web
« Respuesta #9 en: 24 Mayo 2019, 02:06 am »

Una pregunta es posible que mi planteamiento est mal, pero lo q quiero lograr es , crear una aplicacion donde igrese el correo la contraseña y abra el explorador mostrandome la bandeja de entrada.

Asumiré que hablas de live.com o gmail. ¿Pero te refieres a que el usuario inserte su mail y contraseña en alguna caja de texto de la UI de tu programa?. ¿Y por que no simplemente abrir la página de login en el navegador y dejar que el usuario introduzca allí sus datos de login?. ¿Por que complicar este paso?, si el usuario va a tener que escribir el nombre y contraseña de cualquiera de las dos formas, solo que con una te complicarías la vida automatizando el navegador para rellenar el form de login, y con la otra no.

Como ya mencioné, para iniciar sesión en gmail o microsoft live/hotmail con la intención de llevar a cabo operaciones en segundo plano, sin renderizar visualmente nada en el navegador, lo más conveniente es usar la API oficial para .NET framework.

Pero para lo que tu quieres hacer, es suficiente con usar un webbrowser. La idea sería dejar que el usuario rellene el form de login en el webbrowser la primera vez, y en los próximos reinicios de la aplicacion no haya necesidad de volver a rellenar dicho form. ¿O no te sirve así para lo que pretendas hacer?.

Aquí tienes un ejemplo en C# y con una implementación similar a la clase WebClient que te mostré en VB.NET:

Saludos.
« Última modificación: 24 Mayo 2019, 02:13 am por Eleкtro » En línea



Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines