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:
' ***********************************************************************
' Author : ElektroStudios
' Modified : 28-February-2018
' ***********************************************************************
#Region " Public Members Summary "
#Region " Constructors "
' New()
#End Region
#Region " Properties "
' CookiesEnabled As Boolean
' Cookies As CookieContainer
' Timeout As Integer
#End Region
#End Region
#Region " Option Statements "
Option Strict On
Option Explicit On
Option Infer Off
#End Region
#Region " Imports "
Imports System.ComponentModel
Imports System.Drawing
Imports System.Net
Imports System.Runtime.InteropServices
#End Region
#Region " DevWebClient "
Namespace 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(GetType(Component), "Component.bmp")>
<ToolboxItemFilter("System.Windows.Forms", ToolboxItemFilterType.Allow)>
<ComVisible(True)>
Public Class DevWebClient : Inherits WebClient
#Region " Properties "
''' ----------------------------------------------------------------------------------------------------
''' <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 Property CookiesEnabled As Boolean
''' ----------------------------------------------------------------------------------------------------
''' <summary>
''' Gets or sets the cookies associated with this <see cref="DevWebClient"/>.
''' </summary>
''' ----------------------------------------------------------------------------------------------------
''' <value>
''' The cookies associated with this <see cref="DevWebClient"/>.
''' </value>
''' ----------------------------------------------------------------------------------------------------
Public Property Cookies As CookieContainer
''' ----------------------------------------------------------------------------------------------------
''' <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 Property Timeout As Integer = Global.System.Threading.Timeout.Infinite
#End Region
#Region " Constructors "
''' ----------------------------------------------------------------------------------------------------
''' <summary>
''' Initializes a new instance of the <see cref="DevWebClient"/> class.
''' </summary>
''' ----------------------------------------------------------------------------------------------------
Public Sub New()
Me.Cookies = New CookieContainer()
End Sub
#End Region
#Region " Protected Methods "
''' ----------------------------------------------------------------------------------------------------
''' <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 Overrides Function GetWebRequest(ByVal address As Uri) As WebRequest
Dim request As WebRequest = MyBase.GetWebRequest(address)
request.Timeout = Me.Timeout
If (Me.CookiesEnabled) AndAlso (TypeOf request Is HttpWebRequest) Then
DirectCast(request, HttpWebRequest).CookieContainer = Me.Cookies
End If
Return request
End Function
#End Region
End Class
End Namespace
#End Region
Un ejemplo para loguearse en el foro de elhacker.net:
Dim uri As New Uri("https://foro.elhacker.net/index.php?action=login2", UriKind.Absolute)
Dim cred As New NetworkCredential("NOMBRE", "CONTRASEÑA")
Dim query As String = HttpUtility.ParseQueryString($"cookielength=90&user={cred.UserName}&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)
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.