Jump to content

Recommended Posts

Posted

Ora bem andava aqui entretido e lembrei-me que podia fazer um script em python para me facilitar algumas tarefas nos jogos de browser online.

Pois bem, tudo certo, até á parte de introduzir o login e password, é que não me parece que esteja a entrar com as credênciais, pois estou a guardar a página depois de tentar logar, e a página que obtenho é uma página sem eu aparecer como logado.

Já tentei várias formas que aparecem na net, com o urllib2, alguém sabe indicar o que estou a fazer mal?

import urllib, urllib2, cookielib
#cookie storage
cj = cookielib.CookieJar()
#create an opener
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
#Add useragent, sites don't like to interact programs.
opener.addheaders.append(('User-Agent', 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:28.0) Gecko/20100101 Firefox/28.0'))
opener.addheaders.append(('Accept', 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'))
opener.addheaders.append(('Accept-Language', 'en-US,en;q=0.5'))
opener.addheaders.append(('Accept-Encoding', 'gzip, deflate'))
opener.addheaders.append(('Connection', 'keep-alive'))
#opener.addheaders.append( ('Referer', 'http://www.hacker-project.com') )
login_data = urllib.urlencode({'user' : 'Dr_Lion',
'pwd' : 'xxxxxxxx',
'submit' : 'Login'
})
resp = opener.open('http://www.hacker-project.com', login_data)
#you are now logged in and can access "members only" content.
#when your all done be sure to close it
f = urllib2.urlopen("http://www.hacker-project.com")
pagina = f.read()
fich=open("conteudo_pag.htm", "w")
fich.write(pagina)
fich.close()
resp.close()

A password obviamente não é a verdadeira, mas se for necessário arranjo uma outra conta com umas credênciais corretas.

Não entendo o que se passa, a página mostra como se não conseguisse fazer login.

Posted

Após muita pesquisa, e ter cruzado a informação de vários sites, consegui fazer login na página utilizando a lib mechanize, fica o código, agora falta-me fazer o mais fácil, que é obter os dados que me interessam e processa-los.

import sys
import os
import mechanize
import time
url = "http://hacker-project.com/index.php"
br = mechanize.Browser()
#cookies, come to the dark side, we have . .
cj = cookielib.LWPCookieJar()
br.set_cookiejar(cj)
# Browser options
br.set_handle_equiv(True)
br.set_handle_gzip(True)
br.set_handle_redirect(True)
br.set_handle_referer(True)
br.set_handle_robots(False)
#adicionar um user-agent, tentar que o server pense que se trate de um browser
br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')]
page = br.open(url)
#tentar as duas alternativas
br.select_form(name="login")
#send login information
br.form["user"] = "Utilizador"
br.form["pwd"] = "password"
#submit form
br.submit()

page = br.open("http://hacker-project.com")
pagin = page.read().decode("UTF-8")
#br.click_link(link)

fi = open("tmpp.htm", "w")
fi.write(pagin)
fi.close()

Se alguém tiver alguma sugestão ou conselhos a dar fico á espera.

  • 4 weeks later...
Posted

Tenho estado um tempo parado, hoje decidi voltar a isto, e ia tudo muito bem, até que estando eu a usar o python para percorrer a página aberta pelo mechanize <page = br.open(link)> depois esperava eu que fazendo um <for line in page:> ele me retornasse as linhas certinhas, a verdade é que não o faz, dá-me ideia que me retorna a página web como sendo apenas uma linha, ou seja, não entende/ignora os \n.

Alguma forma de corrigir este comportamento de ignorar a mudança de linha?

Posted

Ele entende os "\n" simplesmente não faz qualquer instrução para usar o mesmo para separar o texto em linhas numa lista, por exemplo.

Em Python nativo poderias usar "page.readlines()" no qual ele constrói uma lista em que cada elemento é uma linha. Se a biblioteca que estiveres a usar não tiver este função experimenta fazer, após a instrução de leitura:

linhas = pagin.split('\n')

A função split faz uma lista utlizando como separador o argumento dentro dela, neste caso o "\n".

Já agora confirma que o ficheiro fi ("tmpp.htm") tem a formatação correcta com os "\n" (não vá ele estar a tirá-los com algum automatismo).

  • 2 weeks later...
Posted

Já consegui resolver o problema, ao que parece não tinha nada haver com o python, mas com uma falha minha, que no meio de alguns ciclos encadeados devia estar a fazer alguma azelhisse, ou uma iteração sobre a mesma variável, ou algo parecido que me estava a alterar a variável no momento errado e por isso quando lá voltava em vez de ter uma lista com cada linha do ficheiro, tinha uma lista com cada letra de cada linha ou coisa semelhante.

De qualquer forma agradeço a ajuda, o readlines() de facto funciona, só não sei se o seu comportamento é bom ou não para ficheiros grandes, mas de qualquer forma aqui não é o caso.

Posted

Não sei o que entendes por ficheiros grandes mas, regra geral, nenhuma função em Python que envolva listas é bom para dados extensos (ocupa demasiado memória e é possível que tenha menor performance que bibliotecas numéricas, por exemplo).

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.