簡単なchromedriveで自動ログインを実現し、ログインの検証コードを解読する.
4655 ワード
from selenium import webdriver
import time
import requests
from lxml import etree
import base64
#
def getheaders():
driver = webdriver.Chrome()
#
url = 'https://accounts.douban.com/login?alias=&redir=https%3A%2F%2Fwww.douban.com%2F&source=index_nav&error=1001'
time.sleep(2)
#
driver.get(url)
time.sleep(2)
#
driver.find_element_by_id('email').send_keys('******')
driver.find_element_by_id('password').send_keys('******')
#
try:
# xpath
html_ele = etree.HTML(driver.page_source)
html_img = html_ele.xpath('//img[@id="captcha_image"]/@src')[0]
#
response = requests.get(html_img)
# 64
b64_str = base64.b64encode(response.content)
v_type = 'cn'
# post
form = {
'v_pic': b64_str,
'v_type': v_type,
}
# headers
headers = {
'Authorization':'APPCODE 5c3fb1*****2c6b7e297cc7'
}
#
url = 'http://yzmplus.market.alicloudapi.com/fzyzm'
#
response = requests.post(url,data=form,headers=headers)
res_vcode = response.json()['v_code']
print(res_vcode)
#
driver.find_element_by_id('captcha_field').send_keys(res_vcode)
except:
print('don`t need')
#
driver.find_element_by_class_name('btn-submit').click()
# cookie
cookie = driver.get_cookies()
print(cookie)
# cookie
cookie_list = []
for cookie_dict in cookie:
cookie_res = cookie_dict['name'] +'='+ cookie_dict['value']
cookie_list.append(cookie_res)
cookie = ';'.join(cookie_list)
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36',
'Cookie':cookie
}
if __name__ == '__main__':
headers = getheaders()
#
url_info = 'https://www.douban.com/people/183367314/'
response = requests.get(url_info,headers=headers)
with open('douban.html','wb')as f:
f.write(response.content)