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行。不知道是我网速问题还是真的如网上的帖子所说,懒得等,直接开启硬件加速,问题解决。