Python 시 뮬 레이 션 로그 인 방법(네 가지)

본문
방법 1:이미 알 고 있 는 쿠키 를 직접 사용 하여 접근 합 니 다.
특징:
간단 하지만 브 라 우 저 에 먼저 로그 인해 야 합 니 다.
원리:
쉽게 말 하면 쿠키 는 요청 한 클 라 이언 트 에 저장 되 고 서버 는 쿠키 를 이용 하여 서로 다른 클 라 이언 트 를 구분 합 니 다.http 는 상태 가 없 는 연결 이기 때문에 서버 가 한꺼번에 여러 개의 요청 을 받 았 을 때 어떤 요청 이 같은 클 라 이언 트 가 시 작 했 는 지 판단 할 수 없습니다.'로그 인 후에 볼 수 있 는 페이지'라 는 행 위 는 바로 클 라 이언 트 가 서버 에'나 는 방금 로그 인 한 그 클 라 이언 트'라 는 것 을 증명 해 야 한다.따라서 클 라 이언 트 의 신분 을 표시 하고 정 보 를 저장 하기 위해 쿠키 가 필요 합 니 다(예 를 들 어 로그 인 상태).
물론 이것 은 다른 클 라 이언 트 의 쿠키 를 얻 으 면 우 리 는 이 를 사칭 하여 서버 와 대화 할 수 있다 는 것 을 의미한다.이것 은 우리 의 절차 에 틈 탈 기 회 를 가 져 왔 다.
우 리 는 먼저 브 라 우 저 로 로그 인 한 후에 개발 자 도 구 를 사용 하여 쿠키 를 봅 니 다.이 어 프로그램 에서 이 쿠키 를 가지 고 사이트 에 요청 을 보 내 면 프로그램 이 방금 로그 인 한 브 라 우 저 로 가장 하여 로그 인 후에 만 볼 수 있 는 페이지 를 얻 을 수 있 습 니 다.
구체 적 인 절차:
1.브 라 우 저 로 로그 인하 여 브 라 우 저의 쿠키 문자열 가 져 오기
먼저 브 라 우 저 로 로그 인 합 니 다.개발 자 도 구 를 열 고 network 옵션 으로 이동 합 니 다.왼쪽 Name 란 에서 현재 웹 주 소 를 찾 습 니 다.오른쪽 Headers 옵션 을 선택 하고 Request Headers 를 보십시오.브 라 우 저 에 게 발급 되 는 쿠키 가 포함 되 어 있 습 니 다.네,바로 뒤의 문자열 입 니 다.그것 을 복사 해서 잠시 후에 코드 에 쓸 것 이다.
프로그램 을 실행 하기 전에 로그 인 하 는 것 이 좋 습 니 다.너무 일찍 로그 인하 거나 브 라 우 저 를 끄 면 복사 한 쿠키 가 만 료 되 어 무효 가 될 수 있 습 니 다.

2.코드 쓰기
urllib 라 이브 러 리 버 전:

import sys
import io
from urllib import request
sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='utf8') #           
#          
url = 'http://ssfw.xmu.edu.cn/cmstar/index.portal'
#         cookie,           
cookie_str = r'JSESSIONID=xxxxxxxxxxxxxxxxxxxxxx; iPlanetDirectoryPro=xxxxxxxxxxxxxxxxxx'
#          
url = 'http://ssfw.xmu.edu.cn/cmstar/index.portal'
req = request.Request(url)
#  cookie
req.add_header('cookie', raw_cookies)
#     
req.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36')
resp = request.urlopen(req)
print(resp.read().decode('utf-8'))
requests 라 이브 러 리 버 전:

import requests
import sys
import io
sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='utf8') #           
#          
url = 'http://ssfw.xmu.edu.cn/cmstar/index.portal'
#         cookie,           
cookie_str = r'JSESSIONID=xxxxxxxxxxxxxxxxxxxxxx; iPlanetDirectoryPro=xxxxxxxxxxxxxxxxxx'
# cookie        ,       
cookies = {}
for line in cookie_str.split(';'):
 key, value = line.split('=', 1)
 cookies[key] = value
방법 2:로그 인 후 가 져 온 쿠키 접근 시 뮬 레이 션
원리:
저 희 는 먼저 프로그램 에서 사이트 에 로그 인 요청 을 보 냅 니 다.즉,로그 인 정 보 를 포함 한 폼(사용자 이름,비밀번호 등)을 제출 하 는 것 입 니 다.응답 에서 쿠키 를 받 으 면 앞으로 다른 페이지 를 방문 할 때 도 이 쿠키 를 가 져 가면 로그 인 후에 만 볼 수 있 는 페이지 를 얻 을 수 있 습 니 다.
구체 적 인 절차:
1.양식 제출 페이지 찾기
브 라 우 저의 개발 자 도 구 를 이용 해 야 합 니까?network 옵션 으로 이동 하고 Preserve Log(중요!)를 선택 하 십시오.브 라 우 저 에서 사이트 에 로그 인 하 다.그리고 왼쪽 Name 란 에서 폼 이 제출 한 페이지 를 찾 습 니 다.어떻게 찾 지?오른쪽 을 보고 Headers 옵션 으로 가세 요.우선,Genel 에 서 는 Request Method 가 POST 여야 합 니 다.그 다음 에 맨 아래 에 Form Data 라 는 부분 이 있어 야 합 니 다.그 안에 방금 입력 한 사용자 이름과 비밀번호 등 을 볼 수 있 습 니 다.왼쪽 Name 도 볼 수 있 습 니 다.login 이라는 단어 가 들 어 있 으 면 폼 을 제출 하 는 페이지 일 수도 있 습 니 다.

여기 서 강조해 야 할 것 은'폼 이 제출 한 페이지'는 일반적으로 사용자 이름과 비밀 번 호 를 입력 하 는 페이지 가 아 닙 니 다!그 러 니까 도 구 를 이용해서 찾 아야 돼.
2.제출 할 데이터 찾기
브 라 우 저 에 로그 인 할 때 사용자 이름과 비밀번호 만 적 었 지만 폼 에 포 함 된 데 이 터 는 이것 뿐만 이 아 닙 니 다.Form Data 에서 제출 해 야 할 모든 데 이 터 를 볼 수 있 습 니 다.

3.코드 쓰기
 urllib 라 이브 러 리 버 전:

import sys
import io
import urllib.request
import http.cookiejar
sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='utf8') #           
#     POST   
data = {'Login.Token1':'  ', 
 'Login.Token2':'  ', 
 'goto:http':'//ssfw.xmu.edu.cn/cmstar/loginSuccess.portal', 
 'gotoOnFail:http':'//ssfw.xmu.edu.cn/cmstar/loginFailure.portal'}
post_data = urllib.parse.urlencode(data).encode('utf-8')
#     
headers = {'User-agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36'}
#           (          )
login_url = ' http://ssfw.xmu.edu.cn/cmstar/userPasswordValidate.portal
#      
req = urllib.request.Request(login_url, headers = headers, data = post_data)
#  cookie
cookie = http.cookiejar.CookieJar()
# cookie  opener
opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cookie))
#      ,    opener    cookie,        
resp = opener.open(req)
#          
url = 'http://ssfw.xmu.edu.cn/cmstar/index.portal'
#      
req = urllib.request.Request(url, headers = headers)
resp = opener.open(req)
print(resp.read().decode('utf-8'))
requests 라 이브 러 리 버 전:

import requests
import sys
import io
sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='utf8') #           
#          
url = 'http://ssfw.xmu.edu.cn/cmstar/index.portal'
#         cookie,           
cookie_str = r'JSESSIONID=xxxxxxxxxxxxxxxxxxxxxx; iPlanetDirectoryPro=xxxxxxxxxxxxxxxxxx'
# cookie        ,       
cookies = {}
for line in cookie_str.split(';'):
 key, value = line.split('=', 1)
 cookies[key] = value
#     
headers = {'User-agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36'}
#   get         cookies
resp = requests.get(url, headers = headers, cookies = cookies)
print(resp.content.decode('utf-8'))
분명히 requests 라 이브 러 리 가 더 편 한 것 같 아 요.
방법 3:아 날로 그 로그 인 후 session 으로 로그 인 상 태 를 유지 합 니 다.
원리:
세 션쿠키 와 비슷 한 점 은 서버 가 클 라 이언 트 를 알 아 볼 수 있다 는 점 이다.간단 한 이 해 는 모든 클 라 이언 트 와 서버 의 상호작용 을'세 션'으로 여 기 는 것 이다.같은'세 션'에 있 는 이상 서버 는 이 클 라 이언 트 가 로그 인 했 는 지 여 부 를 알 수 있 습 니 다.
구체 적 인 절차:
1.양식 제출 페이지 찾기
2.제출 할 데이터 찾기
이 두 걸음 과 방법 두 걸음 은 같다.
3.코드 쓰기
requests 라 이브 러 리 버 전

import requests
import sys
import io
sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='utf8') #           
#     POST   
data = {'Login.Token1':'  ', 
 'Login.Token2':'  ', 
 'goto:http':'//ssfw.xmu.edu.cn/cmstar/loginSuccess.portal', 
 'gotoOnFail:http':'//ssfw.xmu.edu.cn/cmstar/loginFailure.portal'}
#     
headers = {'User-agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36'}
#           (          )
login_url = 'http://ssfw.xmu.edu.cn/cmstar/userPasswordValidate.portal'
#  Session
session = requests.Session()
# session       ,    session     cookie
#   print(session.cookies.get_dict())  
resp = session.post(login_url, data)
#          
url = 'http://ssfw.xmu.edu.cn/cmstar/index.portal'
#      
resp = session.get(url)
print(resp.content.decode('utf-8'))
방법 4:헤더 없 는 브 라 우 저 로 접근
특징:
기능 이 강해 서 거의 모든 웹 페이지 에 대처 할 수 있 지만 코드 효율 이 낮 을 수 있다.
원리:
프로그램 에서 웹 사 이 트 를 방문 하기 위해 브 라 우 저 를 호출 할 수 있다 면 로그 인 같은 조작 은 쉬 울 것 이다.Python 에 서 는 Selenium 라 이브 러 리 를 사용 하여 브 라 우 저 를 호출 할 수 있 습 니 다.코드 에 적 힌 동작(웹 페이지 를 열 고 클릭...)은 브 라 우 저 로 충 실 히 실 행 됩 니 다.이 제 어 된 브 라 우 저 는 Firefox,Chrome 등 이 될 수 있 지만 가장 많이 사용 되 는 것 은 PhantomJS 라 는 헤드 없 는 브 라 우 저 입 니 다.사용자 이름 비밀 번 호 를 입력 하고'로그 인'버튼 을 누 르 고 다른 웹 페이지 를 여 는 등의 조작 을 프로그램 에 쓰 면 PhamtomJS 가 확실히 로그 인 을 시 키 고 응답 을 되 돌려 주 는 것 이다.
구체 적 인 절차:
1.selenium 라 이브 러 리,PhantomJS 브 라 우 저 설치
2.원본 코드 에서 로그 인 할 때 입력 한 텍스트 상자,단추 등 요 소 를 찾 습 니 다.
머리 없 는 브 라 우 저 에서 작업 을 하려 면 입력 상 자 를 찾 아야 정 보 를 입력 할 수 있 습 니 다.로그 인 단 추 를 찾 아야 클릭 할 수 있 습 니 다.
브 라 우 저 에서 사용자 이름 비밀 번 호 를 입력 하 는 페이지 를 열 고 사용자 이름 을 입력 하 는 텍스트 상자 로 커서 를 이동 합 니 다.오른쪽 단 추 를 누 르 고'심사 요소'를 선택 하면 오른쪽 웹 페이지 소스 코드 에서 텍스트 상자 가 어떤 요소 인지 볼 수 있 습 니 다.마찬가지 로 원본 코드 에서 암 호 를 입력 한 텍스트 상자,로그 인 단 추 를 찾 을 수 있 습 니 다.

3.프로그램 에서 상기 요 소 를 어떻게 찾 는 지 고려 합 니 다.
Selenium 라 이브 러 리 는 find 를 제공 합 니 다.element(s)_by_xxx 방법 으로 웹 페이지 의 입력 상자,단추 등 요 소 를 찾 습 니 다.그 중 xxx 는 id,name,tag 일 수 있 습 니 다.name(태그 이름),classname(class),xpath(xpath 표현 식)등 일 수도 있 습 니 다.물론 웹 소스 코드 를 구체 적 으로 분석 해 야 한다.
4.코드 쓰기

import requests
import sys
import io
from selenium import webdriver
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf8') #           
#  Phantomjs     ,    phantomjs.exe         
browser = webdriver.PhantomJS('d:/tool/07-net/phantomjs-windows/phantomjs-2.1.1-windows/bin/phantomjs.exe')
#    
url = r'http://ssfw.xmu.edu.cn/cmstar/index.portal'
#       
browser.get(url)
#       , js      
browser.implicitly_wait(3)
#     
username = browser.find_element_by_name('user')
username.send_keys('  ')
#    
password = browser.find_element_by_name('pwd')
password.send_keys('  ')
#  “  ”    
student = browser.find_element_by_xpath('//input[@value="student"]')
student.click()
#  “  ”  
login_button = browser.find_element_by_name('btn')
login_button.submit()
#    
browser.save_screenshot('picture1.png')
#       
print(browser.page_source.encode('utf-8').decode())
browser.quit()
총결산
위 에서 말 한 것 은 소 편 이 여러분 에 게 소개 한 Python 모 의 로그 인 방법 입 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 면 메 시 지 를 남 겨 주세요.소 편 은 바로 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!

좋은 웹페이지 즐겨찾기