urllib2 및 HTTPCookieProcessor을 사용하여 웹 사이트에 로그인하고 있습니다. 여러 계정에 동시에 로그인하고 쿠키를 저장하여 나중에 재사용하고 싶습니다.Python과 동시에 여러 웹 사이트 계정에 로그인하는 방법
이렇게하려면 접근 방식이나 라이브러리를 권장 할 수 있습니까?
urllib2 및 HTTPCookieProcessor을 사용하여 웹 사이트에 로그인하고 있습니다. 여러 계정에 동시에 로그인하고 쿠키를 저장하여 나중에 재사용하고 싶습니다.Python과 동시에 여러 웹 사이트 계정에 로그인하는 방법
이렇게하려면 접근 방식이나 라이브러리를 권장 할 수 있습니까?
OP는 동시성 문제가 아니라고 분명히했습니다. 순차 처리를 염두에두면 훨씬 간단합니다. 한 번 SIP Phone 기지국을 업데이트하기 위해 다음과 같은 것을 사용했습니다 (전화 번호부에 VCard 파일을 업로드하는 데 사용할 수있는 웹 프런트 엔드가있었습니다). 난 그냥 쓰레기를 잘라 버리고 이름을 바꿨다.이 해킹 스크립트에서는 이 아니고이 전혀 테스트되지 않았다. 그것의 유일한 목적은 그가 이것을 처리 할 수있는 방법에 대해 OP에게 아이디어를주는 것입니다.
#!/usr/bin/python
# -*- coding:utf-8 -*-
from optparse import OptionParser
import sys
from mechanize import Browser, CookieJar, Request, urlopen
accounts = [
{'ipaddr': '127.0.0.1', 'user': 'joe', 'pass': 'foobar'},
]
class WebsiteAccount(object):
def __init__(self, ipaddr, username, password, browser):
self.ipaddr = ipaddr
self.username = username
self.password = password
self.browser = browser
self.cookiejar = CookieJar()
self.browser.set_cookiejar(self.cookiejar)
def login(self):
self.browser.open('http://'+self.ipaddr+'/login.html')
self.browser.select_form(name='loginform')
self.browser.form.set_value(self.username, name='username')
self.browser.form.set_value(self.password, name='password')
resp = self.browser.submit()
print 'Logging into account %[email protected]%s ...' % (self.username, self.ipaddr),
if resp.geturl().endswith('/login.html'):
print 'FAILED!'
sys.exit(1)
print ' OK'
def logout(self):
print ('Logging out from account %[email protected]%s...' % (self.username, self.ipaddr),
self.browser.open('http://'+self.ipaddr+'/logout.html')
self.browser.close()
print 'OK'
def main():
parser = OptionParser()
parser.add_option('-d', '--debug', action='store_true', dest='debug', default=False)
parser.add_option('-v', '--verbose', action='store_true', dest='verbose', default=False)
(opts, args) = parser.parse_args()
for account in accounts:
browser = Browser()
browser.set_handle_referer(True)
browser.set_handle_redirect(True)
browser.set_handle_robots(False)
bs = WebsiteAccount(account['ipaddr'],
account['user'],
account['pass'],
browser)
# DEBUG
if opts.debug == True:
browser.set_debug_redirects(True)
browser.set_debug_responses(True)
browser.set_debug_http(True)
bs.login()
try:
# ... do some stuff
# save cookies here?
pass
finally:
# you shouldn't use this if you are interested in the login cookies
bs.logout()
if __name__=='__main__':
main()
참고 : 이처럼 sys.exit을 사용하면 총체적입니다. 대신 예외를 사용하십시오. – paprika
예. 쿠키 항아리가 따로있는 것 같아 세션을 독립적으로 유지해야합니다. – hoju