最近在做一個項目,需要用到cookies登錄,想法是,在同一個瀏覽器下,打開兩個標簽頁進行。讓其自動獲取cookies,先記錄,不行的話,到時候再手動加載cookies。
1 ''' 2 #selenium加載新標簽頁 3 ''' 4 #導入所需庫 5 from selenium import webdriver 6 from selenium.webdriver.common.keys import Keys 7 import time 8 9 #初始化瀏覽器的一些參數 10 options = webdriver.ChromeOptions() #實例化 11 options.add_argument('--headless') #無頭模式 12 options.add_argument('--disable-gpu') #禁用gpu硬件加速 13 options.add_argument('--window-size=1920, 1080') #初始化窗口大小,網上很多人說用maximize_window()最大化窗口,經測試,然並卵 14 15 #定義兩個鏈接,以便觀察 16 url1 = 'https://www.baidu.com' #用在瀏覽器標簽頁1 17 url2 = 'https://www.sina.com.cn' #用在瀏覽器標簽頁2 18 19 #初始化瀏覽器 20 driver = webdriver.Chrome(options=options) 21 #driver.maximize_window() #然並卵的最大化窗口函數 22 23 #開始請求網頁 24 driver.get(url1) 25 driver.implicitly_wait(5) #等待加載,用time.sleep()的話,我更建議用這個函數 26 driver.save_screenshot('baidu.png') #截圖查看是否符合預期 27 #打印以便比較 28 print(driver.window_handles) 29 cookies = driver.get_cookies() 30 print(cookies) 31 32 #新增標簽頁 33 newTab = 'window.open("https://www.sina.com.cn");' #就當成js語句吧 34 driver.execute_script(newTab) #輸出js語句 35 #切換標簽頁 36 #driver.switch_to_window(driver.window_handles[-1]) #切換到最后一個標簽頁,switch_to_window在3.7已經不推薦使用了(反正我的版本是3.7.9,姑且這么說) 37 driver.switch_to.window(driver.window_handles[-1]) #切換到第二個標簽頁 38 cookies2 = driver.get_cookies() 39 print(cookies2) 40 41 #截圖 42 driver.save_screenshot('sina.com.cn.png') 43 #打印第二個標簽頁的值用來和第一個比較 44 print(driver.window_handles)
方法總是不止一種,再加一種:
1 ''' 2 #selenium創建標簽頁方法2 3 ''' 4 from selenium import webdriver 5 from selenium.webdriver import ActionChains 6 from selenium.webdriver.common.keys import Keys 7 8 #初始化一些參數 9 options = webdriver.ChromeOptions() 10 options.add_argument('--headless') 11 # options.add_argument('--disable-gpu') 12 options.add_argument('--window-size=1920, 1080') 13 14 #定義兩個url 15 url1 = 'https://www.baidu.com' 16 url2 = 'https://www.sina.com.cn' 17 18 #初始化瀏覽器 19 driver = webdriver.Chrome() 20 #請求第一個網頁 21 driver.get(url1) 22 driver.implicitly_wait(5) #等待加載 23 driver.save_screenshot('baidu.png') #保存截圖 24 baiduCookies = driver.get_cookies() #獲取cookie 25 print(baiduCookies) #打印cookie 26 27 #實例化一個行為 28 actions = ActionChains(driver) 29 # 經測試下面的按鍵沒用 30 # #調用actions模擬按鍵,先按下鍵盤下的Control鍵,然后再發送t,然后再松開Control鍵,這樣我們就發送了一個control+t的命令,即添加標簽頁 31 # actions.key_down(Keys.CONTROL).send_keys('t').key_up(Keys.CONTROL).perform() 32 # 調整思路,那就在原標簽頁按住Ctrl+鏈接也會打開新的標簽頁,一般瀏覽器都這樣 33 news = driver.find_element_by_link_text('新聞') #找到帶鏈接的新聞標簽 34 actions.key_down(Keys.CONTROL).click(news).key_up(Keys.CONTROL).perform() #找到news並按住ctrl點擊 35 #切換到第二個標簽頁 36 driver.switch_to.window(driver.window_handles[-1]) 37 #利用第二個標簽頁請求第二個url 38 driver.get(url2) 39 driver.save_screenshot('anotherTab.png') #保存截圖 40 anotherTabCookies = driver.get_cookies() #獲取cookies 41 print(anotherTabCookies) #打印cookies 42 43 # driver.close() #是退出當前句柄的標簽頁 44 # driver.quit() #退出瀏覽器
看到網上有帖子說,打開第二個標簽頁很卡,也就是根本加載不出第二段代碼的代碼41行。不知道是我網速問題還是真的如網上的帖子所說,懶得等,直接開啟硬件加速,問題解決。