1 # coding:utf-8 2 # 用webdriver登錄並獲取cookies,並用requests發送請求,以豆瓣為例 3 from selenium import webdriver 4 import requests 5 import time 6 import json 7 import sys 8 reload(sys) 9 sys.setdefaultencoding('utf-8') 10 11 def main(): 12 # 從命令行參數獲取登錄用戶名和密碼 13 user_name = sys.argv[1] 14 password = sys.argv[2] 15 16 # 豆瓣登錄頁面URL 17 login_url = 'https://www.douban.com/accounts/login' 18 19 # 獲取chrome的配置 20 opt = webdriver.ChromeOptions() 21 # 在運行的時候不彈出瀏覽器窗口 22 # opt.set_headless() 23 24 # 獲取driver對象 25 driver = webdriver.Chrome(chrome_options = opt) 26 # 打開登錄頁面 27 driver.get(login_url) 28 29 print 'opened login page...' 30 31 # 向瀏覽器發送用戶名、密碼,並點擊登錄按鈕 32 driver.find_element_by_name('form_email').send_keys(user_name) 33 driver.find_element_by_name('form_password').send_keys(password) 34 # 多次登錄需要輸入驗證碼,這里給一個手工輸入驗證碼的時間 35 time.sleep(6) 36 driver.find_element_by_class_name('btn-submit').submit() 37 print 'submited...' 38 # 等待2秒鍾 39 time.sleep(2) 40 41 # 創建一個requests session對象 42 s = requests.Session() 43 # 從driver中獲取cookie列表(是一個列表,列表的每個元素都是一個字典) 44 cookies = driver.get_cookies() 45 # 把cookies設置到session中 46 for cookie in cookies: 47 s.cookies.set(cookie['name'],cookie['value']) 48 # 關閉driver 49 driver.close() 50 51 # 需要登錄才能看到的頁面URL 52 page_url = 'https://www.douban.com/accounts/' 53 # 獲取該頁面的HTML 54 resp = s.get(page_url) 55 resp.encoding = 'utf-8' 56 print 'status_code = {0}'.format(resp.status_code) 57 # 將網頁內容存入文件 58 with open('html.txt','w+') as fout: 59 fout.write(resp.text) 60 61 print 'end' 62 63 if __name__ == '__main__': 64 main()
