簡単なchromedriveで自動ログインを実現し、ログインの検証コードを解読する.


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)