2014-04-12 3 views
0

로그인 정보가 필요한 웹 사이트에 액세스하려고합니다. 연습을 위해 나는 단지 그것이 작동하는지보기 위해 Hotmail에 들어가려고 노력했다. 나는이 코드가 옳은지 전혀 모른다. 시행 착오를 통해 "실행 중"이라는 코드가 있지만 여전히 작동하지 않습니다. 누군가 나를 도울 수 있습니까?파이썬을 사용한 온라인 웹 양식 액세스

감사합니다, 브랜든

Python 3.4.0 (v3.4.0:04f714765c13, Mar 16 2014, 19:25:23) [MSC v.1600 64 bit (AMD64)] on win32 
Type "copyright", "credits" or "license()" for more information. 



import urllib.request 
import webbrowser 

url = 'http://hotmail.com' 
data = urllib.parse.urlencode({'idDiv_PWD_UsernameExample' : 'email','idDiv_PWD_PasswordExample' : 'password'}) 
binary_data = data.encode('utf8') 
results = urllib.request.urlopen(url, binary_data) 
html = results.geturl() 
print (html) 

답변

0

일반 고려

쿠키은 아마도 전체 로그인 과정에서 사용됩니다. 그러면 다음 단계가 필요할 수 있습니다.

  1. 초기 쿠키를 얻으려면 로그인 페이지를로드하십시오.
  2. 1 단계의 로그인 데이터와 쿠키를 보내고 로그인 페이지를 다시로드하십시오.
  3. 로그인 성공 후 리디렉션을 따르십시오.

하지만 덕분에 "포함 배터리", 그것은 어려운 일이 아니다에, 난 그냥 호드 그룹웨어 다음과 같은 예를 시도 :

import urllib.request 
import http.cookiejar 
import urllib.parse 

cookiejar = http.cookiejar.CookieJar() 

loginpage = "https://example.com/login.php" 

opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cookiejar)) 

data = {'user': 'username', 'pw': 'password'} # + what else might be required 

binData = urllib.parse.urlencode(data).encode('utf-8') 

result = opener.open(loginpage) # without credentials, to get cookie 

result.read() 

for c in cookiejar: # just debugging to see if we got a cookie 
    print(c) 


result = opener.open(loginpage, binData) # now send the crendentials 

page = result.read().decode()    # read() will read after redirects! 

f = open("out.html", "w")     # store output in a file 
f.write(page)        # if everything worked, this should look 
f.close()         # like the landing page 

또한 대부분의 사이트가 자바 스크립트, 파이썬 필요가 있습니다 그걸 감당할 수 없어. 브라우저에서 자바 스크립트를 사용하지 않도록 설정하고 액세스하려는 사이트의 모든 쿠키를 지운 다음 Firebug을 사용하여 프로세스를주의 깊게 살펴보고 어떤 정보 (쿠키, GET/POST 매개 변수, 리디렉션 등)가 전달되는지 확인하는 것이 좋습니다. 로그인 프로세스를 위해. 그럼 당신은 파이썬을 사용하여 이것을 다시 만들려고 할 수 있습니다.

핫메일 특정

Hotmail.com은 로그인 폼 작업 할 차선의 출발점이 될 것으로 보인다. 당신이 소스를 보면, 당신은 "진짜"입력 필드가 사용하려고 보이는 <div> 아니라고 볼 수있다 (내가보기 엔 당신이 파이어 폭스를 사용하는 경우 Firebug 제안)하지만,이 하나

<input type="email" lang="en" name="login" id="i0116" maxlength="113" 
class="ltr_override" aria-labelledby="idLbl_PWD_Username"> 

암호는 입력 필드에서이 일 개

<input type="password" name="passwd" id="i0118" autocomplete="off" 
aria-labelledby="idDiv_PWD_PasswordExample"> 

를 입력하면 더미 (또는 실제) 정보에 포함하고 좀 더 많은 정보가 전송됩니다 방화범의 "네트워크"탭에서 볼 수있는, 로그인을 시도한다 :

LoginOptions 3 
NewUser 1 
PPFT {very long encoded string} 
PPSX Pas 
i1 0 
i12 1 
i13 0 
i14 226 
i15 2270 
i17 0 
i18 __Login_Strings|1,__Login_Core|1, 
i2 1 
i3 92877 
i4 0 
i7 0 
idsbho 1 
login [email protected] 
passwd password456 
sso 0 
type 11 

loginpassword이 충분할 수 있지만 Hotmail 계정이 없으므로 추가 테스트를 수행 할 수 없습니다. urllib.request를 사용하는 일반적인 접근 방식은 괜찮은 것 같습니다 (단 geturl은 URL을 가져 오므로 변수 html의 이름을 더 나은 이름으로 변경해야합니다).

+0

지금까지 도와 줘서 고마워! 나는 그것을 또한 시도했다. 그리고 그것은 아직도 나의 이야기에 도착하지 않고있다. 다른 누군가? 확실히 핫메일이어야합니다. 나는 Gmail에서 똑같은 시도를했고 그 중 하나는 작동하지 않는다. – user3526320

+0

나는 내 대답을 업데이트했다 : 쿠키가 또한 이유 일 수있다. – Jasper

+0

글쎄 이것은 내게 방향을 준다. 나는 내가 알아낼 수있는 것을 보았다. 악천후와 같은 것들을 사용하는 방법에 대한 튜토리얼을 찾으십시오. 모든 도움에 감사드립니다!내가 질문이있는 경우에 대비하여 아프다. – user3526320

관련 문제