web-dev-qa-db-ja.com

PythonでWebサイトにログインするにはどうすればよいですか?

どうすればいいですか?特定のリンクを(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" />

これは可能ですか?

75
Bruno 'Shady'

twillmechanize に基づいています)を使用したい場合があります。それは非常に使いやすく、あなたが望むことをすることができるはずです。

次のようになります。

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

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

submit('0')

showforms()を使用してログインするサイトを参照すると、go(...)を使用してすべてのフォームを一覧表示できます。 pythonインタープリターから試してみてください。

61
sloth

簡単にするために、サイトのURLがwww.example.comで、ユーザー名とパスワードを入力してサインアップする必要があるとします。ログインページにアクセスします http://www.example .com/login.php 今、ソースコードを表示し、フォームタグのようなアクションURLを検索します

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

userinfo.phpを使用して、 ' http://example.com/userinfo.php 'となる絶対URLを作成し、単純なpythonスクリプトを実行します。

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

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

いつか誰かの助けになることを願っています。

41

通常、サイトにログインするにはcookieが必要です。つまり、cookielib、urllib、urllib2です。 Facebook Webゲームをプレイしていたときに書き戻したクラスを次に示します。

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またはリダイレクトハンドラーは必ずしも必要ではありませんが、それらは害を与えず、オープナーをより堅牢にします。また、Cookieは必要ないかもしれませんが、投稿したフォームだけではわかりません。コメントアウトされた「Remember me」入力からのみ、あなたはそうするかもしれないと思う。

24
Anthony Briggs
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 をご覧ください。

18
blokeley

Webページの自動化?間違いなく「ウェブボット」

webbotは、動的に変化するIDとクラス名を持ち、Seleniumやmechanizeよりも多くのメソッドと機能を持つWebページでも動作します。

ここにスニペットがあります:)

from webbot import Browser 
web = Browser()
web.go_to('google.com') 
web.click('Sign in')
web.type('[email protected]' , 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

9
Natesh bhat

一般に、Webサイトはさまざまな方法で承認を確認できますが、ターゲットにしているWebサイトを使用すると、合理的に簡単に確認できるようです。

必要なのは、POSTauth/login URLに、そこに表示されるさまざまなフィールドを持つフォームエンコードされたblobにすることです(ラベルforを忘れて、それらは人間の訪問者のための装飾です)。 handle=whatever&password-clear=pwdなど、ハンドル(電子メールとも呼ばれます)とパスワードの値を知っている限り、問題ありません。

おそらく、[POST] _は、セッションを検証するSet-Cookieヘッダーを持つ「ログインに成功しました」ページにリダイレクトします(そのCookieを保存し、セッション!)。

6
Alex Martelli

HTTPの場合、現在の選択肢は Requests- HTTP for Humans である必要があります

4
Andrew_1510