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行。不知道是我网速问题还是真的如网上的帖子所说,懒得等,直接开启硬件加速,问题解决。
Python之selenium创建多个标签页的更多相关文章
- selenium WebDriver 对浏览器标签页的切换
关于selenium WebDriver 对浏览器标签页的切换,现在的市面上最新的浏览器,当点击一个链接打开一个新的页面都是在浏览器中打开一个标签页,而selenium只能对窗口进行切换的方法,只能操 ...
- selenium获取新页面标签页(只弹出一个新页面的切换)
selenium获取新页面标签页(只弹出一个新页面的切换) windows = driver.current_window_handle #定位当前页面句柄 all_handles = driver. ...
- selenium chrome在新标签页打开链接的方法
目前chrome是我在实现webdriver时运行最稳定的浏览器,如何利用webdriver打开多个标签页和链接呢,到处查找得到的往往只是如何打开标签页.打开标签页很简单,chrome浏览器打开标签页 ...
- selenium多个标签页的切换(弹出新页面的切换)
1_windows = driver.current_window_handle #定位当前页面句柄 all_handles = driver.window_handles #获取全部页面句柄 for ...
- EasyUI中动态生成标签页
这是最近学到的内容,当时是有思路但是不知道怎么获取当前的点击对象,就没有实现功能,通过更深入的学习,我知道了不仅仅是Java,Oracle中有一个this,同样的EasyUI中也存在一个this,来获 ...
- 4. VIM 系列 - 认识VIM的缓冲区、窗口、标签页
目录 1. 缓冲区 2. 窗口 3. 标签页 4. 设置一下热键 1. 缓冲区 文件和缓冲区的区别 vim 打开一个文件时,其实是从磁盘中读取文件到内存中,vim的一些操作其实是在操作缓冲区, 当使用 ...
- selenium+python 浏览器标签页跳转 switch_to_window
浏览器页面跳转方法记录: from selenium import webdriver import time browser = webdriver.Chrome() first_url='http ...
- python selenium 对浏览器标签页进行关闭和切换
1.关闭浏览器全部标签页 driver.quit() 2.关闭当前标签页(从标签页A打开新的标签页B,关闭标签页A) driver.close() 3.关闭当前标签页(从标签页A打开新的标签页B,关闭 ...
- EasyUI创建异步树形菜单和动态添加标签页tab
创建异步树形菜单 创建树形菜单的ul标签 <ul class="easyui-tree" id="treeMenu"> </ul> 写j ...
随机推荐
- ElasticSearch 分词器,了解一下
这篇文章主要来介绍下什么是 Analysis ,什么是分词器,以及 ElasticSearch 自带的分词器是怎么工作的,最后会介绍下中文分词是怎么做的. 首先来说下什么是 Analysis: 什么是 ...
- acm 易错警示
1:建图注意是有向图还是无向图,无向开两倍数组 2:看题注意是否为多组输入,多组输入注意初始化. 3:减法取模一定要注意 4:stl中.size()为unsigned如果要计算注意强制类型转换(int ...
- JVM(三)-java虚拟机类加载机制
概述: 上一篇文章,介绍了java虚拟机的运行时区域,Java虚拟机根据不同的分工,把内存划分为各个不同的区域.在java程序中,最小的运行单元一般都是创建一个对象,然后调用对象的某个 方法.通过上一 ...
- nameServer路由发现
RocketMQ路由发现是非实时的,当Topic路由出现变化时,NameServer不主动推动给客户端,而是客户端定时拉取主题最新的路由 总结: topic路由的是brokername
- 【mq学习笔记】mq 过期文件删除机制
broker不会关注这个文件上的消息是否全部被消费.默认每个文件的过期时间为72小时.
- jdk1.8hashmap常见的面试问题
1.HashMap原理,内部数据结构? 底层使用哈希表(数组加链表)来存储,链表过长会将链表转成红黑树,以实现在O(logn)时间复杂度内查找 2.讲一下HashMap中的put方法过程? 对key求 ...
- 领域设计:Entity与VO
本文探讨如下内容: 什么是状态 什么是标识 什么是Entity 什么是VO(ValueObject) 在设计中如何识别Entity和VO 要理解Entity和VO,需要先理解两个概念:「状态」和「标识 ...
- Docker中搭建FastDFS文件系统(多图)
关于FastDFS FastDFS 是以 C 语言开发的一项开源轻量级分布式文件系统,他对文件进行管理,主要功能有:文件存储,文件同步,文件访问(文件上传/下载)等,特别适合以文件为载体的在线服务,如 ...
- 在 CentOS 7 安装 Tomcat
一. 安装 JDK 8 1.1 下载 JDK 8 cd /opt/ wget --no-cookies --no-check-certificate --header "Cookie: gp ...
- Mongo管理
MongoDB存储引擎 一. WiredTiger引擎 1. MongoDB3.2版本以上,设置为存储引擎. 2. 基于文档级别的并发控制功能(锁机制) (1). 锁级别:文档级别 (2). ...