PDA

Visualizza la versione completa : [PYTHON] Aprire e chiudere ripetutamente pagine web con login


Zorgatone
23-12-2010, 17:01
In merito a quanto ho chiesto in questo topic (http://forum.html.it/forum/showthread.php?s=&threadid=1438530) ho pensato di provare in Python ma non mi tiene aperto il login, perciò non mi serve a niente. Come faccio a tenere aperta la connessione in python?


import urllib2

username = raw_input("Insert Username: ")
password = raw_input("Insert Password: ")
start = input("Insert starting number: ")
repeater = input("Insert repeat number: ")

logon = "http://www.bloodywow.com/my-account.php?do=login&username=" + username + "&password=" + password
page = "http://www.bloodywow.com/my-account-3.php?do=up"

loginHandle = urllib2.urlopen(logon)

for i in range(start, start + repeater):
pageHandle = urllib2.urlopen(page + str(i))
pageHandle.close()

loginHandle.close()

print "Finished!"

Zorgatone
23-12-2010, 21:01
Originariamente inviato da Zorgatone
In merito a quanto ho chiesto in questo topic (http://forum.html.it/forum/showthread.php?s=&threadid=1438530) ho pensato di provare in Python ma non mi tiene aperto il login, perciò non mi serve a niente. Come faccio a tenere aperta la connessione in python?


import urllib2

username = raw_input("Insert Username: ")
password = raw_input("Insert Password: ")
start = input("Insert starting number: ")
repeater = input("Insert repeat number: ")

logon = "http://www.bloodywow.com/my-account.php?do=login&username=" + username + "&password=" + password
page = "http://www.bloodywow.com/my-account-3.php?do=up"

loginHandle = urllib2.urlopen(logon)

for i in range(start, start + repeater):
pageHandle = urllib2.urlopen(page + str(i))
pageHandle.close()

loginHandle.close()

print "Finished!"

Ho tentato anche a usare i socket ma non li ho capiti molto, in particolare non mi permetteva di riutilizzare più volte lo stesso socket per url diversi! Mi potreste aiutare?

alka
24-12-2010, 11:27
Originariamente inviato da Zorgatone
Come faccio a tenere aperta la connessione in python?


Non sono esperto di Python, tuttavia non è chiaro cosa intendi con tenere aperta la connessione, nel senso che - trattandosi di HTTP - la connessione è stateless per definizione.

Se ci si riferisce al fatto di "rimanere loggati nella pagina", allora molto probabilmente è necessario gestire i cookie creati in fase di login e restituirli al server sulle richieste successive.

Come farlo in Python, non conoscendo né il linguaggio in modo approfondito né le librerie, non saprei, ma ti lascio il piacere di questa ricerca. ;)

Zorgatone
24-12-2010, 14:39
Originariamente inviato da alka
Non sono esperto di Python, tuttavia non è chiaro cosa intendi con tenere aperta la connessione, nel senso che - trattandosi di HTTP - la connessione è stateless per definizione.

Se ci si riferisce al fatto di "rimanere loggati nella pagina", allora molto probabilmente è necessario gestire i cookie creati in fase di login e restituirli al server sulle richieste successive.

Come farlo in Python, non conoscendo né il linguaggio in modo approfondito né le librerie, non saprei, ma ti lascio il piacere di questa ricerca. ;)
Hai ragione sui cookies ma nonostante la numerosa documentazione sul web non trovo quasi nulla! :dhò:

Zorgatone
24-12-2010, 14:42
Comunque indipendentemente dai cookies ho modificato il programma con i socket, ma uno di essi ho bisogno di riutilizzarlo nel ciclo e non me lo fa fare nemmeno dopo avere cambiato le opzioni del socket!! :bhò:

import socket

username = raw_input("Insert Username: ")
password = raw_input("Insert Password: ")
start = input("Insert starting number: ")
repeater = input("Insert repeat number: ")

logon = "http://www.bloodywow.com/my-account.php?do=login&username=" + username + "&password=" + password
page = "http://www.bloodywow.com/my-account-3.php?do=up"

HOST = 'bloodywow.com'
PORT = 80

loginHandle = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
loginHandle.connect((logon, 80))

pageHandle = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
pageHandle.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

for i in range(start, start + repeater):
currpage= page + str(i)
print currpage
pageHandle.connect((currpage, PORT))
pageHandle.shutdown(2)
else:
loginHandle.shutdown(2)

print "Finished!"

ramy89
07-01-2011, 04:15
Salve,sto provando a fare lo stesso utilizzando la versione 2.7 dell' interprete,appena lo eseguo mi apre e chiude la finestra del prompt,non riesco nemmeno a leggere cosa mi dice.
C' è un modo per settare una pausa come con la getchar() in c?

Zorgatone
07-01-2011, 18:55
Originariamente inviato da ramy89
Salve,sto provando a fare lo stesso utilizzando la versione 2.7 dell' interprete,appena lo eseguo mi apre e chiude la finestra del prompt,non riesco nemmeno a leggere cosa mi dice.
C' è un modo per settare una pausa come con la getchar() in c?

Adesso non mi viene in mente... Ma potresti metterci un raw_input() e poi non usarlo... giusto per leggere.
O meglio puoi fare attendere dei secondi:


from time import sleep

sleep(secondi)

ramy89
08-01-2011, 00:52
Adesso ho provato,ma non ha proprio effetto il codice.
Quando inserisco il codice mi dovrebbe aprire la finstra di firefox automaticamente?
E poi PORT io inserisco 80,ma come fai a sapere che è quella giusta?

Zorgatone
08-01-2011, 16:01
Originariamente inviato da ramy89
Adesso ho provato,ma non ha proprio effetto il codice.
Quando inserisco il codice mi dovrebbe aprire la finstra di firefox automaticamente?
E poi PORT io inserisco 80,ma come fai a sapere che è quella giusta?

Quanto ho scritto io non apre le pagine web in un browser!
Non vedi questo è stato letto perche lo apri come fosse un file in lettura!

ramy89
08-01-2011, 16:27
Se è cosi penso che devi anche gestire i cookie per tenerti loggato,ho trovato un esempio:



import urllib2, cookielib, re



url = 'http://secure.myspace.com/index.cfm?fuseaction=login.process'


email = "" #put your email address here
pwd = "" #put your password here


data = "__VIEWSTATE=%2FwEPDwUKLTY1Mjc2MTMwMWQYAQUeX19Db250 cm9sc1JlcXVpcmVQb3N0QmFja0tleV9fFgIFPWN0bDAwJGN0bD AwJE1haW4kY3BNYWluJFNwbGFzaERpc3BsYXkkY3RsMDAkUmVt ZW1iZXJfQ2hlY2tib3gFPWN0bDAwJGN0bDAwJE1haW4kY3BNYW luJFNwbGFzaERpc3BsYXkkY3RsMDAkTG9naW5fSW1hZ2VCdXR0 b24%3D&NextPage=&ctl00%24ctl00%24Main%24cpMain%24SplashDisplay%24ct l00%24Email_Textbox="+email+"&ctl00%24ctl00%24Main%24cpMain%24SplashDisplay%24ct l00%24Password_Textbox="+pwd+"&ctl00%24ctl00%24Main%24cpMain%24SplashDisplay%24ct l00%24Login_ImageButton.x=36&ctl00%24ctl00%24Main%24cpMain%24SplashDisplay%24ct l00%24Login_ImageButton.y=15&ctl00%24ctl00%24Main%24cpMain%24SplashDisplay%24ct l00%24nexturl=&ctl00%24ctl00%24Main%24cpMain%24SplashDisplay%24ct l00%24apikey=&ctl00%24ctl00%24Main%24cpMain%24SplashDisplay%24ct l00%24ContainerPage="



cj = cookielib.CookieJar()

opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(c j))

opener.addheaders = [('Referer', 'http://www.myspace.com/index.cfm?fuseaction=splash'),

('Content-Type', 'application/x-www-form-urlencoded'),

('User-Agent', 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.14) Gecko/20080404 Firefox/2.0.0.14')]

usock = opener.open(url, data)

the_page = usock.read()

usock.close()


Non ho idea se funzioni :confused:

Loading