在使用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")') # 括号内的网址一样要加引号,不然会报错!

最新文章

  1. 在非UI线程中自制Dispatcher
  2. iOS宏和__attribute__
  3. java基础2.0:Object、Class、克隆、异常编程
  4. 图结构练习——最短路径(floyd算法(弗洛伊德))
  5. mac os x查看端口命令
  6. 结合Scikit-learn介绍几种常用的特征选择方法
  7. ubuntu英文乱码解决
  8. NET 查找程序集路径(CLR关于Assembly的搜索路径的过程)
  9. PHP中该怎样防止SQL注入?
  10. SSL与TLS的区别以及介绍
  11. 在Eclipse中使用Maven插件 博客分类: Java相关技术
  12. linux学习心态建设
  13. sudo密码错误的解决办法
  14. Spring配置数据源的几种方法
  15. 开涛spring3(4.3) - 资源 之 4.3 访问Resource
  16. LintCode 521.去除重复元素
  17. openmp
  18. Axure-----三级下拉菜单的具体实现过程
  19. sublime text 使用小技巧
  20. 波士顿法律第一至五季/全集Boston Legal迅雷下载

热门文章

  1. Lucene的简单用法
  2. idea护眼色设置
  3. idea编辑器快捷键调整
  4. WORLD 文件格式的保存
  5. angular input 为file on-change 无效
  6. js 提取某()特殊字符串长度
  7. 洛谷P4723 【模板】线性递推(多项式取模 线性代数)
  8. 苹果8plus怎么录屏视频
  9. springboot 数据验证
  10. 章节三、5-Getters-Setters和this关键字part01