Pergunta

Preciso automatizar um processo envolvendo um site que utiliza um formulário de login.Preciso capturar alguns dados nas páginas seguintes à página de login.

Eu sei como copiar páginas normais, mas não aquelas que estão atrás de um site seguro.

  1. Isso pode ser feito com a classe .NET WebClient?
    • Como eu faria login automaticamente?
    • Como eu manteria o login nas outras páginas?
Foi útil?

Solução

Uma maneira seria automatizar um navegador - você mencionou o WebClient, então acho que você pode estar se referindo ao WebClient no .NET.

Dois pontos principais:

  • Não há nada de especial em https relacionado ao WebClient - ele simplesmente funciona
  • Os cookies normalmente são usados ​​para realizar autenticação – você precisará capturá-los e reproduzi-los

Aqui estão os passos que eu seguiria:

  1. GET o formulário de login, capture o cookie na resposta.
  2. Usando Xpath e HtmlAgilityPack, encontre os nomes e valores dos campos "tipo de entrada = oculto".
  3. POST para a ação do formulário de login com nome de usuário, senha e valores de campo ocultos no corpo da solicitação.Inclua o cookie nos cabeçalhos da solicitação.Novamente, capture o cookie na resposta.
  4. OBTENHA as páginas desejadas, novamente, com o cookie nos cabeçalhos da solicitação.

Na etapa 2, menciono um método um tanto complicado para automatizar o login.Normalmente, você pode postar com nome de usuário e senha diretamente na ação conhecida do formulário de login, sem obter o formulário inicial ou retransmitir os campos ocultos.Alguns sites possuem validação de formulário (diferente da validação de campo) em seus formulários o que faz com que esse método não funcione.

HtmlAgilityPack é uma biblioteca .NET que permite transformar html mal formado em um XmlDocument para que você possa XPath sobre ele.Bem útil.

Finalmente, você pode se deparar com uma situação em que o formulário depende do script do cliente para alterar os valores do formulário antes de enviar.Talvez seja necessário simular esse comportamento.

Usar uma ferramenta para visualizar o tráfego http para este tipo de trabalho é extremamente útil - recomendo ieHttpHeaders, Violinista, ou Firebug (guia da rede).

Outras dicas

Você pode simular facilmente a entrada do usuário.Você pode enviar o formulário na página da web do seu programa, enviando uma solicitação post\get para um site.
O formulário de login típico é semelhante a:

<form name="loginForm" method="post" Action="target_page.html">
   <input type="Text" name="Username">
   <input type="Password" name="Password">
</form>

Você pode enviar uma solicitação de postagem ao site fornecendo valores para os campos Nome de usuário e Senha.O que acontece depois que você envia sua solicitação depende muito do site, normalmente você será redirecionado para alguma página.Suas informações de autorização serão armazenadas em sessões\cookie.Portanto, se você raspar o cliente e puder manter a sessão da web\entende cookies, você poderá acessar páginas protegidas.

Não está claro na sua pergunta qual linguagem/estrutura você usará.Por exemplo, existe uma estrutura para captura de tela (incluindo funcionalidade de login) escrita em perl - WWW::Mecanizar

Observe que você pode enfrentar alguns problemas se o site no qual está tentando fazer login usar scripts java ou algum tipo de CAPTCHA.

Você pode esclarecer por favor?A classe WebClient de que você fala é aquela em HTTPUnit/Java?

Nesse caso, sua sessão deverá ser salva automaticamente.

Não está claro na sua pergunta a qual classe (ou idioma) WebClient você está se referindo.

Se tiver um Java Runtime você pode usar a classe Apache HttpClient;aqui está um exemplo que escrevi usando Groovy que acessa a API Delicious por SSL:

   def client = new HttpClient()

   def credentials = new UsernamePasswordCredentials( "username", "password" )
   def authScope = new AuthScope("api.del.icio.us", 443, AuthScope.ANY_REALM)
   client.getState().setCredentials( authScope, credentials )

   def url = "https://api.del.icio.us/v1/posts/get"

   def method = new PostMethod( url )
   method.addParameter( "tag", tag )
   client.executeMethod( method )
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top