Python之selenium創建多個標簽頁


最近在做一個項目,需要用到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行。不知道是我網速問題還是真的如網上的帖子所說,懶得等,直接開啟硬件加速,問題解決。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM