मैं पायथन के साथ एक वेबसाइट पर कैसे लॉगिन कर सकता हूं?


88

मैं यह कैसे कर सकता हूं? मैं कुछ निर्दिष्ट लिंक (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" />

क्या यह संभव है?

जवाबों:


70

शायद आप टवील का उपयोग करना चाहते हैं । इसका उपयोग करना काफी आसान है और आप जो चाहते हैं वह करने में सक्षम होना चाहिए।

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

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

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

submit('0')

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


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

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

असल में, मैं ModuleNotFoundErrorटवील 1.8.0 का उपयोग / परिवर्तित करके और स्थापित करने के साथ lxmlऔर requestsसाथ हल कर सकता है pip install। लेकिन अब मुझे मिल जाता है SyntaxErrorजब मैं आयात करने की कोशिश करता हूं क्योंकि कहीं False = 0....
CGFoX

2
यह इसे ठीक करने के लिए एक दर्द की तरह है, लेकिन यह काम करता है: stackoverflow.com/a/45459994/2745116
CGFoX

यह साइटों HTTPS के साथ काम करता है या मैं की तरह कुछ करने के लिए इस ?
Mahesha999

53

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

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

अब निरपेक्ष URL बनाने के लिए userinfo.php लें, जो ' 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

मुझे उम्मीद है कि यह किसी दिन कहीं मदद करता है।


यह मेरे द्वारा
अनुराग पाण्डेय

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

वेब स्वचालन के लिए सबसे अच्छा विकल्प वेबबॉट है। stackoverflow.com/a/51170181/6665568
नटेश भट

क्या सभी मान हमेशा उपयोगकर्ता नाम और पासवर्ड होते हैं? मुझे नहीं लगता कि यह मेरी चुनी हुई साइट के लिए काम कर रहा है।
डायलन लोगन

@DylanLogan आपको हमेशा यह निरीक्षण करना होगा कि वास्तविक वेबपेज सर्वर को क्या भेजता है और आपकी स्क्रिप्ट को इसके अनुकूल बनाता है। सर्वर को आपकी स्क्रिप्ट और वेब ब्राउज़र के बीच अंतर करने में सक्षम नहीं होना चाहिए।
ज्येकोमन

28

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

import cookielib
import urllib
import urllib2

# set these to whatever your fb account is
fb_username = "your@facebook.login"
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 या रीडायरेक्ट हैंडलर की आवश्यकता नहीं होगी, लेकिन वे चोट नहीं करते हैं, और यह सलामी बल्लेबाज को और अधिक मजबूत बनाता है। आपको कुकीज़ की आवश्यकता भी नहीं हो सकती है, लेकिन आपके द्वारा पोस्ट किए गए फ़ॉर्म से सिर्फ यह बताना मुश्किल है। मुझे संदेह है कि आप शुद्ध रूप से 'रिमेंबर मी' इनपुट से टिप्पणी कर सकते हैं।


19
import cookielib
import urllib
import urllib2

url = 'http://www.someserver.com/auth/login'
values = {'email-email' : 'john@example.com',
          '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


लिंक काम नहीं कर रहा है: url 2में एक जोड़ा गया था docs.python.org: docs.python.org/2/library/urllib2.html
माइकल कोप्प

18

वेब पेज स्वचालन? निश्चित रूप से "वेबबोट"

webbot यहां तक ​​कि ऐसे वेब पेज भी काम करते हैं जिनमें गतिशील रूप से आईडी और क्लासनाम बदलते हैं और जिसमें सेलेनियम या मैकेनाइज की तुलना में अधिक विधियां और विशेषताएं होती हैं।

यहाँ एक टुकड़ा है :)

from webbot import Browser 
web = Browser()
web.go_to('google.com') 
web.click('Sign in')
web.type('mymail@gmail.com' , into='Email')
web.click('NEXT' , tag='span')
web.type('mypassword' , into='Password' , id='passwordFieldId') # specific selection
web.click('NEXT' , tag='span') # you are logged in ^_^

डॉक्स भी बहुत सीधे आगे और उपयोग करने के लिए सरल हैं: https://webbot.readthedocs.io


यह परीक्षा शानदार काम करती है। क्या यह भी काम करेगा autocomplete=off?
एस एंड्रयू

जीत 64 बिट पर स्थापित नहीं है। त्रुटि:Could not find a version that satisfies the requirement webbot (from versions: 0.0.1.win-amd64)
मुस्तफा

Python3
Natesh bhat

वेबबोट में iframe को कैसे हैंडल करें।? .. मेरा मतलब है कि मुझे एक iframe बंद करना है, जो पेज लोड होने के बाद पॉपअप हो जाता है ..
arihanth jain

7

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

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

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


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.