博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Selenium—获取页面的title,url;使用句柄方式切换窗口
阅读量:4515 次
发布时间:2019-06-08

本文共 3860 字,大约阅读时间需要 12 分钟。

获取当前页面的 title

  • 红框内即为页面的 title

  • 获取方法:driver.title

 

获取当前页面的 url

  • 红框内即为页面的 url
  • 获取方法:driver.current_url

示例:

from selenium import webdriverdriver = webdriver.Chrome()driver.implicitly_wait(10)# 打开百度首页driver.get('http://baidu.com')# 打印当前窗口的 titleprint(driver.title)# 打印当前窗口的 urlprint(driver.current_url) driver.quit()

输出结果如下:

百度一下,你就知道https://www.baidu.com/

 

窗口切换

  我们在使用浏览器打开链接时,通常会存在2种情况

    1. 在当前窗口打开,即覆盖
    2. 新建窗口打开,保留原有窗口

示例:

  1. 百度首页搜索:博客园
  2. 打开博客园官网,获取当前页精华帖的标题
  3. 回到百度输入框,并打印出 title

 

代码如下:

from selenium import webdriverdriver = webdriver.Chrome()driver.implicitly_wait(10)# 打开百度首页driver.get('http://baidu.com')# 输入 博客园 并点击 回车driver.find_element_by_id('kw').send_keys('博客园\n')# 找到博客园的官网,并点击;点击后会在新的窗口打开链接driver.find_element_by_xpath("//h3//a[contains(.,'官网')]/../a[1]").click()# 打印当前窗口的 titleprint(driver.title)# 打印当前窗口的 urlprint(driver.current_url)# 点击博客园的 精华 贴driver.find_element_by_css_selector('a[title="编辑精选博文"]').click()......

输出结果如下:

博客园_百度搜索https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=%E5%8D%9A%E5%AE%A2%E5%9B%AD&rsv_pq=fb7d28ae0001abcf&rsv_t=06598quU7hn3kFKgkuBxhCIOyMaWnFVVXEjwlgeJppBhRahvfl8rUTZcZVQ&rqlang=cn&rsv_enter=1&rsv_sug3=3&rsv_sug1=1&rsv_sug7=100&rsv_sug2=0&inputT=348&rsv_sug4=348selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"a[title="编辑精选博文"]"}# 报错信息,未定位到该元素

浏览器实现结果

  通过浏览器的实现结果,和代码的运行结果,可以判断出:即使web页面已跳转至新窗口,但是代码逻辑还在原有窗口

  为解决该问题,我们需要引入 句柄 的概念: ,粗略的理解,每个窗口对应一个句柄,句柄可认为是一个唯一长字符串

获取句柄的方法:

  • 获取当前页面句柄:driver.current_window_handle
  • 获取所有页面句柄:driver.window_handles

通过句柄,我们可以进行窗口的切换:

  • 切换窗口:driver.switch_to.window()

示例:

from selenium import webdriverdriver = webdriver.Chrome()driver.implicitly_wait(10)# 打开百度首页driver.get('http://baidu.com')# 输入 博客园 并点击 回车driver.find_element_by_id('kw').send_keys('博客园\n')# 找到博客园的官网,并点击;点击后会在新的窗口打开链接driver.find_element_by_xpath("//h3//a[contains(.,'官网')]/../a[1]").click()# 打印出所有的句柄信息print(driver.window_handles)driver.quit()

输出结果如下:

['CDwindow-998407BA3D6B34956871D337B6F377FE', 'CDwindow-844FF13AAEE0E14487AD368DEAA7A0AE']# 从结果中我们可以看出:# driver.window_handles的数据类型是一个 列表

 

让我们回到上面的需求:此时我们唯一要做的就是,打开新的窗口后,代码切换至新窗口,并输出结果

from selenium import webdriverdriver = webdriver.Chrome()driver.implicitly_wait(10)# 打开百度首页driver.get('http://baidu.com')# 输入 博客园 并点击 回车driver.find_element_by_id('kw').send_keys('博客园\n')# 找到博客园的官网,并点击;点击后会在新的窗口打开链接driver.find_element_by_xpath("//h3//a[contains(.,'官网')]/../a[1]").click()# 打印当前窗口的 titleprint('切换前的title:',driver.title)# 切换至新窗口# 首先,我们要先获取到一个主句柄,作为灯塔,防止"迷路"mainWindow = driver.current_window_handle# 接着我们要获取所有的句柄信息,并赋值给 handleshandles = driver.window_handles# 使用for循环,遍历所有的handles,以便判断for handle in handles:    # 使用driver.switch_to.window()方法,切入句柄所在的窗口    driver.switch_to.window(handle)    # 判断 "代码" 是否在当前窗口的title中,如果在,跳出循环    if "代码" in driver.title:        break# 让我们打印一下当前窗口的 titleprint('切换后的title:',driver.title)# 点击博客园的 精华 贴driver.find_element_by_css_selector('a[title="编辑精选博文"]').click()# 定位到标题的元素,并赋值给 itemsitems = driver.find_elements_by_css_selector('div[class="post_item"] h3>a')for one in items:    print(one.text)# 打印完成后,切回主窗口,并打印出当前窗口的 titledriver.switch_to.window(mainWindow)print('切回主句柄的title:',driver.title)

输出结果如下:

切换前的title: 博客园_百度搜索切换后的title: 博客园 - 代码改变世界------------------2019-5-30 前20的精华帖-----------------------------【面试】如果你这样回答“什么是线程安全”,面试官都会对你刮目相看【面试】迄今为止把同步/异步/阻塞/非阻塞/BIO/NIO/AIO讲的这么清楚的好文章(快快珍藏)为啥程序会有bug?关于分布式锁原理的一些学习与思考-redis分布式锁,zookeeper分布式锁ERP不规范,同事两行泪只有程序员才能读懂的西游记从软件工程的角度解读任正非的新年公开信通俗易懂,C#如何安全、高效地玩转任何种类的内存之Span的本质(一)。分布式系统关注点——99%的人都能看懂的「熔断」以及最佳实践神经网络的基本工作原理哎呀,我老大写Bug啦——记一次MessageQueue的优化机器学习web服务化实战:一次吐血的服务化之路Windbg分析高内存占用问题我是怎么把一个项目带崩的彼之蜜糖,吾之砒霜——聊聊软件开发中的最佳实践Linux的内存分页管理通俗易懂,什么是.NET?什么是.NET Framework?什么是.NET Core?藏在正则表达式里的陷阱你所不知道的日志异步落库为什么说 Java 程序员到了必须掌握 Spring Boot 的时候?切回主句柄的title:博客园_百度搜索

 

转载于:https://www.cnblogs.com/wilson-5133/p/10946905.html

你可能感兴趣的文章
第四章小结
查看>>
Windows7下python2.7.6环境变量配置
查看>>
java设计模式------代理模式
查看>>
WPF学习笔记----注释标记,使用自定义资源字典(style)文件的流程
查看>>
元素定位的八大法则
查看>>
Sublime Text 3 使用小记
查看>>
总结Pycharm里面常用的快捷键
查看>>
util.promisify 的那些事儿
查看>>
配置phpstudy+phpstorm+xdebug环境
查看>>
BZOJ 1079 [SCOI2008]着色方案
查看>>
[Win8.1系统]双系统
查看>>
HDU 3899 树形DP
查看>>
继承上机作业
查看>>
设计模式 4/23 建造者模式
查看>>
Logging in Java
查看>>
leetcode算法:Distribute Candies
查看>>
机器学习之路: python 朴素贝叶斯分类器 MultinomialNB 预测新闻类别
查看>>
LINUX 忘记root密码
查看>>
json转换成Map
查看>>
MySQL查看当前用户、存储引擎、日志
查看>>