在使用selenium管理浏览器的时候遇到一些小问题,现将这些小问题作一下总结:

  

(1)browser是什么?

from selenium import webdriver

browser = webdriver.Chrome()
print(browser) # <selenium.webdriver.chrome.webdriver.WebDriver (session="7fa6e41c5d16188b2c9054a97b376ffd")>

这个browser就是一个类的实例。是什么类的实例(其实就是selenium.webdriver.chrome.webdriver.WebDriver这个路径下类的实例),可以通过selenium包进行一步一步查看。

(2)在浏览器中再打开一个窗口

 from selenium import webdriver

 browser = webdriver.Chrome()
browser.get("https://www.baidu.com")
print(browser.current_window_handle) # CDwindow-876A3769096F9B14756B8065F9D09700
browser.execute_script("window.open()")
print(browser.current_window_handle) # CDwindow-876A3769096F9B14756B8065F9D09700
print(browser.window_handles) # ['CDwindow-876A3769096F9B14756B8065F9D09700', 'CDwindow-58192B86EEE5C841A366BA665975F03D']
browser.switch_to.window(browser.window_handles[1])
print(browser.current_window_handle) # CDwindow-58192B86EEE5C841A366BA665975F03D browser.switch_to.window(browser.window_handles[0])
browser.close()
# print(browser.current_window_handle) # selenium.common.exceptions.NoSuchWindowException: Message: no such window: target window already closed
# browser.execute_script("window.open()") # selenium.common.exceptions.NoSuchWindowException: Message: no such window: target window already closed
browser.switch_to.window(browser.window_handles[0])
browser.execute_script("window.open()")

通过执行javascript的window.open()命令,可以打开一个新的窗口。

通过第5行和第7行执行结果可知:打开新窗口时,当前窗口句柄不会自动切换到新的窗口句柄。但是浏览器显示的当前选项卡却是新窗口!!!,如果想将当前句柄的选项卡置于最前面,执行browser.switch_to.window()再切一下就OK了。

通过第8行可知:所有的窗口句柄都保存在window_handles这个列表里面。

通过第9行命令可以切换窗口,括号里面的browser.window_handles[1]其实就是取列表中的第2个值,这个值和窗口唯一对应。

通过第13行关闭当前选项卡,这时执行第14行,报错!说明关闭当前选项卡之后,浏览器不会自动切换到其它存在的窗口。

注释第14行,打开第15行并执行,报错!说明只有浏览器对象存在当前选项卡的时候,才能够执行新建窗口操作。

通过第16行代码,将当前选项卡切换到0,为什么是0?因为列表中之前的索引0被删了,所以之前的1变成了0。此时执行新建窗口操作,可以正常创建。

(3)创建新选项卡的时候直接打开指定网址

from selenium import webdriver

browser = webdriver.Chrome()
browser.get("https://www.baidu.com")
browser.execute_script('window.open("https://www.taobao.com")') # 括号内的网址一样要加引号,不然会报错!

selenium之选项卡管理的更多相关文章

  1. Selenium 选项卡管理

    什么是选项卡: from selenium import webdriver browser = webdriver.Chrome() browser.get("http://www.bai ...

  2. pycharm窗口选项卡管理

    1.主题 我们已经注意到Pycharm的主编辑框是基于窗口选项卡机制显示的,Pycharm选项卡多种多样,这里我们将详细介绍这种选项卡机制.  2.激活的选项卡 每当我们打开一个Python文件时op ...

  3. python爬虫从入门到放弃(八)之 Selenium库的使用

    一.什么是Selenium selenium 是一套完整的web应用程序测试系统,包含了测试的录制(selenium IDE),编写及运行(Selenium Remote Control)和测试的并行 ...

  4. 爬虫、请求库selenium

    阅读目录 一 介绍 二 安装 三 基本使用 四 选择器 五 等待元素被加载 六 元素交互操作 七 其他 八 项目练习 一 介绍 selenium最初是一个自动化测试工具,而爬虫中使用它主要是为了解决r ...

  5. Spider_Man_3 の selenium

    一:介绍 selenium最初是一个自动化测试工具,而爬虫中使用它主要是为了解决requests无法直接执行JavaScript代码的问题 selenium本质是通过驱动浏览器,完全模拟浏览器的操作, ...

  6. selenium用法详解

    selenium用法详解 selenium主要是用来做自动化测试,支持多种浏览器,爬虫中主要用来解决JavaScript渲染问题. 模拟浏览器进行网页加载,当requests,urllib无法正常获取 ...

  7. selenium常用内容

    一.声明浏览器对象 注意点一,Python文件名或者包名不要命名为selenium,会导致无法导入 from selenium import webdriver #webdriver可以认为是浏览器的 ...

  8. python+selenium实现登录账户

    selenium 是一套完整的web应用程序测试系统,包含了测试的录制(selenium IDE),编写及运行(Selenium Remote Control)和测试的并行处理(Selenium Gr ...

  9. Selenium库,Python精品教程!

    什么是Selenium selenium基本使用 用python写爬虫的时候,主要用的是selenium的Webdriver,我们可以通过下面的方式先看看Selenium.Webdriver支持哪些浏 ...

随机推荐

  1. kafka消费者启动报错

    报错信息: WARN Fetching topic metadata with correlation id 14 for topics [Set(test)] from broker [Broker ...

  2. 使用typeof()或者typeof数据类型检测

    使用typeof()或者typeof进行基本数据类型检测(  typeof(X)等于typeof X  返回的是数据类型) 数据类型有:基本数据类型,字符串(string),布尔值(true/fals ...

  3. 反向ajax实现原理

    留言板显示留言一直刷新,那么实现原理是怎么样的? 一般发送留言就是通过正常的ajax向服务器发送数据,而实时显示留言就需要用到轮询了. 什么是轮询:就是使用定时器,每隔固定的时间从客户端向服务器发起请 ...

  4. JavaScript 中的相等操作符 ( 详解 [] == []、[] == ![]、{} == !{} )

    ECMAScript 中的相等操作符由两个等于号 ( == ) 表示,如果两个操作数相等,则返回 true. 相等操作符会先转换操作数(通常称为强制转型),然后比较它们的相等性. 在转换不同的数据类型 ...

  5. 开源项目商业模式分析(2) - 持续维护的重要性 - Selenium和WatiN

    该系列第一篇发布后收到不少反馈,包括: 第一篇里说的MonicaHQ不一定盈利 没错,但是问题在于绝大多数开源项目商业数据并没有公开,从而无法判断其具体是否盈利.难得MonicaHQ是公开的,所以才用 ...

  6. 杨学明老师推出全新课程--《敏捷开发&IPD和敏捷开发结合的实践》

    课时:13小时(2天) 敏捷开发&IPD和敏捷开发结合的实践 讲  师:杨学明 [课程背景] 集成产品开发(IPD).集成能力成熟度模型(CMMI).敏捷开发(Agile Developmen ...

  7. Linux中对逻辑卷进行扩容与缩小

    一.在扩容之前,先查看自己逻辑卷,卷组,物理卷的信息:(在上一篇的基础上:Linux中对逻辑卷的建立) 查看物理卷: # pvdisplay /dev/sdc1 查看卷组: vgdisplay /de ...

  8. python第一百一十天--Django 5

    #####################################中间件################################################ settings.py ...

  9. Django之--POST方法处理表单请求

    上一篇:Django之--MVC的Model 演示了如何使用GET方法处理表单请求,本文讲述直接在当前页面返回结果,并使用更常用的POST方法处理. 一.首先我们修改下page.html <!D ...

  10. git-------基础知识(本地推送项目版本---github上)

    创建Git仓库 一:初始化版本库:-git init 二:添加文件到缓存区:-git add  --添加所有文件 是:加个点-列:git add . 三:查看仓库状态:-git status 四:添加 ...