Python으로 웹 사이트에 로그인하려면 어떻게해야합니까?


87

어떻게하니? 지정된 링크 (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…당신이 로그인 할 사이트로 이동 할 수 있습니다. 파이썬 인터프리터에서 시도하십시오.


어떤 경우에는 submit ()을 사용해야합니다. 참조 : lists.idyll.org/pipermail/twill/2006-August/000526.html 나는 submit () 작업을 사용하여 www.pge.com에 로그인하여이 문제를 확인합니다.
user391339

2
Python 3.6에 대한 솔루션이 있습니까? 능직은 Python 3.5 또는 3.6을 지원하지 않는 것 같습니다. 나는 그것을 다운로드하고 사용하여 변환하려고 시도 2to3했지만 이제 ModuleNotFoundError가져 오려고 할 때 나타납니다.
CGFoX

사실, 난을 해결 할 수 ModuleNotFoundError/ 사용 능 직물 1.8.0 변환 및 설치하여 lxml하고 requestspip install. 하지만 지금은 얻을 SyntaxError내가 가져올 때 어딘가에 때문에 False = 0....
CGFoX

2
그것을 고치는 것은 일종의 고통이지만 작동합니다 : stackoverflow.com/a/45459994/2745116
CGFoX

이 사이트 https로 일을하거나 내가 좋아하는 뭔가를해야합니까 ?
Mahesha999

51

간단하게 만들어 보겠습니다. 사이트의 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을 만들고 이제 간단한 파이썬 스크립트를 실행하십시오.

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

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

언젠가 누군가에게 도움이되기를 바랍니다.


이것은 내가 시도하는 대부분의 웹 사이트가 작동하지 않습니다
아 누락 펜디 교수에게

내가 본 24 개의 도움말 / 스택 오버플로 페이지 중에서 필요한 사이트 하나에서 작동하는 유일한 솔루션이었습니다.
Buoy

웹 자동화를위한 최선의 선택은 웹봇입니다. stackoverflow.com/a/51170181/6665568
바트 Natesh

모든 값이 항상 사용자 이름과 비밀번호입니까? 내가 선택한 사이트에서 이것이 작동하는 것 같지 않습니다.
Dylan Logan

@DylanLogan 항상 실제 웹 페이지가 서버에 보내는 내용을 검사하고 스크립트를 이에 맞게 조정해야합니다. 서버는 스크립트와 웹 브라우저를 구별 할 수 없어야합니다.
Jeyekomon 19

28

일반적으로 사이트에 로그인하려면 쿠키가 필요합니다. 이는 cookielib, urllib 및 urllib2를 의미합니다. 다음은 내가 Facebook 웹 게임을 할 때 답장 한 수업입니다.

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에 a 가 추가되었습니다 docs.python.org: docs.python.org/2/library/urllib2.html
Michael Kopp

18

웹 페이지 자동화? 확실히 "웹봇"

webbot 동적으로 변경되는 ID 및 클래스 이름이 있고 셀레늄 또는 기계화보다 더 많은 방법과 기능을 가진 웹 페이지도 작동합니다.

다음은 스 니펫입니다. :)

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


이 examlpe는 훌륭하게 작동합니다. 이것은 또한 autocomplete=off.?
S Andrew

win 64 비트에 설치하지 마십시오. 오류 :Could not find a version that satisfies the requirement webbot (from versions: 0.0.1.win-amd64)
Mostafa 2018

python3 사용해보십시오
바트 Natesh을

웹봇에서 iframe을 처리하는 방법.
arihanth jain

7

일반적으로 웹 사이트는 여러 가지 방법으로 승인을 확인할 수 있지만 타겟팅하는 웹 사이트를 통해 합리적으로 쉽게 확인할 수 있습니다.

당신이 필요로하는 것입니다 POST받는 사람 auth/login(레이블을 잊지 URL 당신이 볼 수있는 다양한 분야와 형태로 인코딩 된 BLOB for인간의 방문객들이있는 거 장식,). handle=whatever&password-clear=pwd핸들 (일명 이메일)과 비밀번호의 값을 아는 한 괜찮습니다.

아마도 POST는 Set-Cookie세션의 유효성을 검사 하는 헤더 가있는 일부 "성공적으로 로그인했습니다"페이지로 리디렉션 할 것 입니다 (쿠키를 저장하고 세션을 따라 추가 상호 작용시 다시 보내십시오!).


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.