파이썬의 요청 모듈을 사용하여 웹 사이트에 "로그인"하는 방법은 무엇입니까?
Python의 Requests 모듈을 사용하여 웹사이트에 로그인 요청을 올리려고 하는데 제대로 작동하지 않습니다.처음 듣는...그래서 나는 내 사용자 이름과 비밀번호 쿠키를 만들어야 하는지 아니면 내가 찾은 어떤 종류의 HTTP 인증 쿠키를 만들어야 하는지 알 수 없습니다.
from pyquery import PyQuery
import requests
url = 'http://www.locationary.com/home/index2.jsp'
그래서 이제, 저는 "포스트"와 쿠키를 사용해야 한다고 생각합니다.
ck = {'inUserName': 'USERNAME/EMAIL', 'inUserPass': 'PASSWORD'}
r = requests.post(url, cookies=ck)
content = r.text
q = PyQuery(content)
title = q("title").text()
print title
제가 쿠키를 잘못 만들고 있는 것 같은 느낌이 듭니다.몰라.
로그인이 안 되면 홈페이지 제목이 'Locationary.com '으로 나오고 로그인이 안 되면 '홈페이지'로 나와야 합니다.
요청사항과 쿠키에 대해 몇가지 설명해주시고 도와주시면 감사하겠습니다 :D
감사해요.
...아직 제대로 작동하지 않았습니다.좋아요... 로그인하기 전에 홈 페이지 HTML에 다음과 같이 표시됩니다.
</td><td><img src="http://www.locationary.com/img/LocationaryImgs/icons/txt_email.gif"> </td>
<td><input class="Data_Entry_Field_Login" type="text" name="inUserName" id="inUserName" size="25"></td>
<td><img src="http://www.locationary.com/img/LocationaryImgs/icons/txt_password.gif"> </td>
<td><input class="Data_Entry_Field_Login" type="password" name="inUserPass" id="inUserPass"></td>
그래서 제대로 하고 있다고 생각하지만 출력은 여전히 "Locationary.com "입니다.
두 번째 편집:
저는 오랫동안 로그인할 수 있고, 그 도메인으로 페이지를 요청할 때마다 로그인한 것처럼 내용이 표시되기를 원합니다.
다른 해결책을 찾으셨겠지만, 저와 같은 질문을 찾으시는 분들은 다음과 같은 요청을 통해 해결할 수 있습니다.
먼저 Marcus가 그랬던 것처럼 로그인 양식의 소스를 확인하여 양식이 게시하는 URL과 사용자 이름 및 암호 필드의 이름 속성 등 세 가지 정보를 얻습니다.이 예제에서는 사용자 이름과 사용자 패스에 있습니다.
그것을 얻으면, 이정를후에는을 할 수 .requests.Session()
로그인 세부 정보를 페이로드로 사용하여 로그인 URL에 게시 요청을 하는 인스턴스입니다.세션 인스턴스에서 요청을 하는 것은 기본적으로 요청을 정상적으로 사용하는 것과 동일하며, 쿠키 등을 저장하고 사용할 수 있도록 지속성을 추가할 뿐입니다.
로그인 시도가 성공했다고 가정하면 세션 인스턴스를 사용하여 사이트에 추가 요청을 할 수 있습니다.사용자를 식별하는 쿠키는 요청을 승인하는 데 사용됩니다.
예
import requests
# Fill in your details here to be posted to the login form.
payload = {
'inUserName': 'username',
'inUserPass': 'password'
}
# Use 'with' to ensure the session context is closed after use.
with requests.Session() as s:
p = s.post('LOGIN_URL', data=payload)
# print the html returned or something more intelligent to see if it's a successful login page.
print p.text
# An authorised request.
r = s.get('A protected web page url')
print r.text
# etc...
원하는 정보가 로그인 후 즉시 사용자가 방문하는 페이지에 있는 경우...
전화를 걸겠습니다.ck
변수payload
대신에, 파이썬-프로그래밍 문서에서처럼:
payload = {'inUserName': 'USERNAME/EMAIL', 'inUserPass': 'PASSWORD'}
url = 'http://www.locationary.com/home/index2.jsp'
requests.post(url, data=payload)
그렇지 않으면...
아래의 https://stackoverflow.com/a/17633072/111362 을 참조하십시오.
간단히 말해보자, 사이트의 URL이 http://example.com/ 이고 사용자 이름과 비밀번호를 입력하여 등록해야 한다고 가정하자, 로그인 페이지로 이동하여 http://example.com/login.php 라고 말하고 소스 코드를 보고 다음과 같은 작업 URL을 검색합니다.
<form name="loginform" method="post" action="userinfo.php">
이제 사용자 정보를 가져옵니다.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
언젠가 이것이 누군가에게 도움이 되길 바랍니다.
그requests.Session()
CSRF Protection(CSRF Protection)을 사용하여 양식에 기록하는 데 도움이 되는 솔루션(Flask-WTF 양식에서 사용됨).확인합니다.csrf_token
은(는) 숨겨진 필드로 필요하며 사용자 이름과 암호를 사용하여 페이로드에 추가합니다.
import requests
from bs4 import BeautifulSoup
payload = {
'email': 'email@example.com',
'password': 'passw0rd'
}
with requests.Session() as sess:
res = sess.get(server_name + '/signin')
signin = BeautifulSoup(res._content, 'html.parser')
payload['csrf_token'] = signin.find('input', id='csrf_token')['value']
res = sess.post(server_name + '/auth/login', data=payload)
웹 사이트 양식에서 사용자 이름에 사용되는 입력 이름 확인<...name=username.../>
및 암호<...name=password../>
아래 스크립트에서 교체합니다.또한 로그인할 원하는 사이트를 가리킬 URL을 바꿉니다.
login.py
#!/usr/bin/env python
import requests
from requests.packages.urllib3.exceptions import InsecureRequestWarning
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
payload = { 'username': 'user@email.com', 'password': 'blahblahsecretpassw0rd' }
url = 'https://website.com/login.html'
requests.post(url, data=payload, verify=False)
의 사용disable_warnings(InsecureRequestWarning)
검증되지 않은 SSL 인증서를 사용하여 사이트에 로그인하려고 하면 스크립트의 출력이 모두 중지됩니다.
추가:
UNIX 기반 시스템의 명령줄에서 이 스크립트를 실행하려면 디렉토리(예:home/scripts
이 디렉토리를 경로에 추가합니다.~/.bash_profile
또는 터미널에서 사용하는 유사한 파일입니다.
# Custom scripts
export CUSTOM_SCRIPTS=home/scripts
export PATH=$CUSTOM_SCRIPTS:$PATH
그런 다음 내부에 이 파이썬 스크립트에 대한 링크를 만듭니다.home/scripts/login.py
ln -s ~/home/scripts/login.py ~/home/scripts/login
터미널을 닫고, 새 터미널을 시작하고, 실행합니다.login
일부 페이지는 로그인/통과 이상이 필요할 수 있습니다.숨겨진 필드도 있을 수 있습니다.가장 신뢰할 수 있는 방법은 검사 도구를 사용하여 로그인하는 동안 네트워크 탭을 보고 전달되는 데이터를 확인하는 것입니다.
언급URL : https://stackoverflow.com/questions/11892729/how-to-log-in-to-a-website-using-pythons-requests-module
'programing' 카테고리의 다른 글
런타임에 jQuery를 사용하여 CSS 규칙/클래스 만들기 (0) | 2023.07.25 |
---|---|
Python을 사용하여 기존 PDF에 텍스트 추가 (0) | 2023.07.20 |
두 개의 데이터 프레임을 병합하려고 하지만 ValueError를 가져옵니다. (0) | 2023.07.20 |
Python range()와 유사한 JavaScript 함수 (0) | 2023.07.20 |
일별로 레코드를 새로 고치는 구체화된 보기 (0) | 2023.07.20 |