2010-05-26 14 views
53

मैं यह कैसे कर सकता हूं? मैं कुछ निर्दिष्ट लिंक (urllib के साथ) में प्रवेश करने की कोशिश कर रहा था, लेकिन यह करने के लिए, मैं में लॉग इन करने की जरूरत हैमैं पायथन के साथ वेबसाइट पर कैसे लॉगिन कर सकता हूं?

मैं साइट से इस स्रोत है:।

<form id="login-form" action="auth/login" method="post"> 
    <div> 
    <!--label for="rememberme">Remember me</label><input type="checkbox" class="remember" checked="checked" name="remember me" /--> 
    <label for="email" id="email-label" class="no-js">Email</label> 
    <input id="email-email" type="text" name="handle" value="" autocomplete="off" /> 
    <label for="combination" id="combo-label" class="no-js">Combination</label> 
    <input id="password-clear" type="text" value="Combination" autocomplete="off" /> 
    <input id="password-password" type="password" name="password" value="" autocomplete="off" /> 
    <input id="sumbitLogin" class="signin" type="submit" value="Sign In" /> 

यह संभव है?

उत्तर

50

शायद आप twill (यह mechanize पर आधारित है) का उपयोग करना चाहते हैं। इसका उपयोग करना काफी आसान है और आप जो चाहते हैं उसे करने में सक्षम होना चाहिए।

यह निम्न तरह दिखेगा:

from twill.commands import * 
go('http://mysite.org') 

fv("1", "email-email", "blabla.com") 
fv("1", "password-clear", "testpass") 

submit('0') 

आप showforms() का उपयोग सभी रूपों को सूचीबद्ध करने के एक बार आप साइट पर आप प्रवेश करना चाहते हैं के लिए ब्राउज़ करने के लिए इस्तेमाल किया go(...) कर सकते हैं। बस इसे अजगर दुभाषिया से आज़माएं।

+0

ध्यान दें कि कुछ मामलों में आपको सबमिट() का उपयोग करने की आवश्यकता है।देखें: http://lists.idyll.org/pipermail/twill/2006- अगस्त /000526.html सबमिट करें() कार्यों का उपयोग करके, मैं इस मुद्दे की पुष्टि करता हूं, मेरे लिए, www.pge.com में लॉग इन करना। – user391339

+0

क्या Python 3.6 के लिए कोई समाधान है? ऐसा लगता है कि टवील पाइथन 3.5 और न ही 3.6 का समर्थन नहीं करता है। मैंने इसे डाउनलोड करने और इसे '2to3' का उपयोग करके परिवर्तित करने की कोशिश की लेकिन अब इसे आयात करने का प्रयास करते समय मुझे' मॉड्यूल नॉटफाउंड एरर 'मिलता है। – CGFoX

+0

दरअसल, मैं टवील 1.8.0 का उपयोग करके/'lxml' और' अनुरोध 'को 'पीआईपी इंस्टॉल' के साथ बदलकर 'मॉड्यूल नॉटफाउंड एरर' को हल कर सकता हूं। लेकिन अब जब मैं आयात करने का प्रयास करता हूं तो मुझे 'सिंटेक्स त्रुटि' मिलता है क्योंकि कहीं 'गलत = 0' .... – CGFoX

5

सामान्य रूप से वेबसाइटें कई अलग-अलग तरीकों से प्राधिकरण की जांच कर सकती हैं, लेकिन जिसे आप लक्षित कर रहे हैं, वह आपके लिए उचित रूप से आसान बनाता है।

आपको बस auth/login यूआरएल के लिए तुम्हें वहाँ देखने के विभिन्न क्षेत्रों के साथ एक फार्म एन्कोड ब्लॉब (लेबल for भूल जाते हैं, वे मानव आगंतुकों के लिए सजावट कर रहे हैं) POST है। handle=whatever&password-clear=pwd और इसी तरह, जब तक आप हैंडल (AKA ईमेल) और पासवर्ड के मानों को जानते हैं, तो आपको ठीक होना चाहिए।

संभवतः वह पोस्ट आपको अपने सत्र को सत्यापित करने वाले Set-Cookie शीर्षलेख के साथ "सफलतापूर्वक लॉग इन किया गया है" पृष्ठ पर रीडायरेक्ट करेगा (उस कुकी को सहेजना सुनिश्चित करें और सत्र के साथ आगे की बातचीत पर वापस भेज दें!)।

14
import cookielib 
import urllib 
import urllib2 

url = 'http://www.someserver.com/auth/login' 
values = {'email-email' : '[email protected]', 
      'password-clear' : 'Combination', 
      'password-password' : 'mypassword' } 

data = urllib.urlencode(values) 
cookies = cookielib.CookieJar() 

opener = urllib2.build_opener(
    urllib2.HTTPRedirectHandler(), 
    urllib2.HTTPHandler(debuglevel=0), 
    urllib2.HTTPSHandler(debuglevel=0), 
    urllib2.HTTPCookieProcessor(cookies)) 

response = opener.open(url, data) 
the_page = response.read() 
http_headers = response.info() 
# The login cookies should be contained in the cookies variable 

अधिक जानकारी के लिए: https://docs.python.org/2/library/urllib2.html

+0

लिंक काम नहीं कर रहा है: 'docs.python.org' urls में '2' जोड़ा गया था: https://docs.python.org/2/library/urllib2.html –

21

आमतौर पर आप एक साइट है, जो cookielib, urllib और urllib2 का मतलब है में लॉग इन करने के लिए कुकीज़ की आवश्यकता होगी। यहां कक्षा जो मैं वापस लिखा था जब मैं फेसबुक वेब खेल खेल रहा था:

import cookielib 
import urllib 
import urllib2 

# set these to whatever your fb account is 
fb_username = "[email protected]" 
fb_password = "secretpassword" 

class WebGamePlayer(object): 

    def __init__(self, login, password): 
     """ Start up... """ 
     self.login = login 
     self.password = password 

     self.cj = cookielib.CookieJar() 
     self.opener = urllib2.build_opener(
      urllib2.HTTPRedirectHandler(), 
      urllib2.HTTPHandler(debuglevel=0), 
      urllib2.HTTPSHandler(debuglevel=0), 
      urllib2.HTTPCookieProcessor(self.cj) 
     ) 
     self.opener.addheaders = [ 
      ('User-agent', ('Mozilla/4.0 (compatible; MSIE 6.0; ' 
          'Windows NT 5.2; .NET CLR 1.1.4322)')) 
     ] 

     # need this twice - once to set cookies, once to log in... 
     self.loginToFacebook() 
     self.loginToFacebook() 

    def loginToFacebook(self): 
     """ 
     Handle login. This should populate our cookie jar. 
     """ 
     login_data = urllib.urlencode({ 
      'email' : self.login, 
      'pass' : self.password, 
     }) 
     response = self.opener.open("https://login.facebook.com/login.php", login_data) 
     return ''.join(response.readlines()) 

आप जरूरी HTTPS की जरूरत नहीं होगी या संचालकों को पुन: निर्देशित, लेकिन वे चोट नहीं है, और यह सलामी बल्लेबाज और अधिक मजबूत बनाता है। आपको कुकीज़ की भी आवश्यकता नहीं हो सकती है, लेकिन आपके द्वारा पोस्ट किए गए फ़ॉर्म से ही बताना मुश्किल है। मुझे संदेह है कि आप पूरी तरह से 'मुझे याद रखें' इनपुट से टिप्पणी कर सकते हैं।

33

मुझे इसे सरल बनाने की कोशिश करते हैं, साइट के मान लीजिए URL www.example.com है और आप यूज़रनेम और पासवर्ड भरकर साइन अप करने की जरूरत है, इसलिए हम प्रवेश पृष्ठ पर जाना अब http://www.example.com/login.php कहना और यह

<form name="loginform" method="post" action="userinfo.php"> 

तरह प्रपत्र टैग कुछ में हो जाएगा यह स्रोत कोड है देखने के लिए और कार्रवाई यूआरएल के लिए खोज अब userinfo.php ले निरपेक्ष URL जो 'http://example.com/userinfo.php हो जाएगा बनाने के लिए ', अब एक साधारण पायथन लिपि चलाएं

import requests 
url = 'http://example.com/userinfo.php' 
values = {'username': 'user', 
      'password': 'pass'} 

r = requests.post(url, data=values) 
print r.content 

मुझे आशा है कि यह किसी को कहीं न कहीं किसी दिन में मदद करता है।

+0

यह अधिकतर के लिए काम नहीं करता है उन वेबसाइटों में से जिन्हें मैंने –

+0

दो दर्जन सहायता/स्टैक ओवरफ्लो पृष्ठों में से देखा, मैंने देखा कि यह एकमात्र समाधान था जिसकी मुझे आवश्यकता थी। – Buoy

संबंधित मुद्दे