当前位置: 首页 > news >正文

五、Selenium操作指南(二)

文章目录

  • 四、获取页面元素属性
    • (一)get_attribute获取属性
    • (二)获取文本
    • (三) 获取其他属性
  • 五、页面交互操作
    • (一)输入文本 send_keys()
    • (二)点击 click()
    • (三)清除文本 clear()
    • (四)回车确认 submit()
    • (五)单选
    • (六)多选
    • (七)下拉框
  • 六、多窗口切换
    • (一)Frame切换
    • (二)选项卡切换

四、获取页面元素属性

既然我们有很多方式来定位页面的元素,那么接下来就可以考虑获取以下元素的属性了,尤其是用Selenium进行网络爬虫的时候。

(一)get_attribute获取属性

以百度首页的logo为例,获取logo相关属性:

<img hidefocus="true" id="s_lg_img" class="index-logo-src" src="//www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png" width="270" height="129" onerror="this.src='//www.baidu.com/img/flexible/logo/pc/index.png';this.οnerrοr=null;" usemap="#mp">
from selenium import webdriver
import time  browser = webdriver.Chrome()browser.get(r'https://www.baidu.com')  logo = browser.find_element_by_class_name('index-logo-src')
print(logo)
print(logo.get_attribute('src'))# 关闭浏览器
browser.close()

输出:

<selenium.webdriver.remote.webelement.WebElement (session="e95b18c43a330745af019e0041f0a8a4", element="7dad5fc0-610b-45b6-b543-9e725ee6cc5d")>
https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png

(二)获取文本

<a class="title-content tag-width c-link c-font-medium c-line-clamp1" href="https://www.baidu.com/s?cl=3&amp;tn=baidutop10&amp;fr=top1000&amp;wd=%E5%90%84%E5%9C%B0%E8%B4%AF%E5%BD%BB%E5%8D%81%E4%B9%9D%E5%B1%8A%E5%85%AD%E4%B8%AD%E5%85%A8%E4%BC%9A%E7%B2%BE%E7%A5%9E%E7%BA%AA%E5%AE%9E&amp;rsv_idx=2&amp;rsv_dl=fyb_n_homepage&amp;sa=fyb_n_homepage&amp;hisfilter=1" target="_blank"><span class="title-content-index c-index-single c-index-single-hot1">1</span><span class="title-content-title">各地贯彻十九届六中全会精神纪实</span></a>

获取热榜的文本,用的是text属性,直接调用即可:

from selenium import webdriver
import time  browser = webdriver.Chrome()browser.get(r'https://www.baidu.com')  logo = browser.find_element_by_css_selector('#hotsearch-content-wrapper > li:nth-child(1) > a')
print(logo.text)
print(logo.get_attribute('href'))# 关闭浏览器
browser.close()

输出:

1各地贯彻十九届六中全会精神纪实
https://www.baidu.com/s?cl=3&tn=baidutop10&fr=top1000&wd=%E5%90%84%E5%9C%B0%E8%B4%AF%E5%BD%BB%E5%8D%81%E4%B9%9D%E5%B1%8A%E5%85%AD%E4%B8%AD%E5%85%A8%E4%BC%9A%E7%B2%BE%E7%A5%9E%E7%BA%AA%E5%AE%9E&rsv_idx=2&rsv_dl=fyb_n_homepage&sa=fyb_n_homepage&hisfilter=1

(三) 获取其他属性

除了属性和文本值外,还有id、位置、标签名和大小等属性。

from selenium import webdriver
import time  browser = webdriver.Chrome()browser.get(r'https://www.baidu.com')  logo = browser.find_element_by_class_name('index-logo-src')
print(logo.id)
print(logo.location)
print(logo.tag_name)
print(logo.size)# 关闭浏览器
browser.close()

输出:

6af39c9b-70e8-4033-8a74-7201ae09d540
{'x': 490, 'y': 46}
img
{'height': 129, 'width': 270}

五、页面交互操作

页面交互就是在浏览器的各种操作,比如上面演示过的输入文本、点击链接等等,还有像清除文本、回车确认、单选框与多选框选中等。

(一)输入文本 send_keys()

其实,在之前的小节中我们有用过此操作。

from selenium import webdriver
import time  browser = webdriver.Chrome()
browser.get(r'https://www.baidu.com')  
time.sleep(2)# 定位搜索框
input = browser.find_element_by_class_name('s_ipt')
# 输入python
input.send_keys('python')
time.sleep(2)# 关闭浏览器
browser.close()

(二)点击 click()

from selenium import webdriver
import time  browser = webdriver.Chrome()
browser.get(r'https://www.baidu.com')  
time.sleep(2)# 选中新闻按钮
click = browser.find_element_by_link_text('新闻')
# 点击之
click.click()
time.sleep(2)# 关闭浏览器全部页面
browser.quit()

(三)清除文本 clear()

from selenium import webdriver
import time  browser = webdriver.Chrome()
browser.get(r'https://www.baidu.com')  
time.sleep(2)# 定位搜索框
input = browser.find_element_by_class_name('s_ipt')
# 输入python
input.send_keys('python')
time.sleep(2)
# 清除python
input.clear()
time.sleep(2)# 关闭浏览器
browser.close()

(四)回车确认 submit()

比如,在搜索框输入文本python,然后回车就出查询操作结果的情况。

from selenium import webdriver
import time  browser = webdriver.Chrome()
browser.get(r'https://www.baidu.com')  
time.sleep(2)# 定位搜索框
input = browser.find_element_by_class_name('s_ipt')
# 输入python
input.send_keys('python')
time.sleep(2)
# 回车查询
input.submit()
time.sleep(5)# 关闭浏览器
browser.close()

(五)单选

单选比较好操作,先定位需要单选的某个元素,然后点击一下即可。

(六)多选

多选好像也比较容易,依次定位需要选择的元素,点击即可。

(七)下拉框

下拉框的操作相对复杂一些,需要用到Select模块。

from selenium.webdriver.support.select import Select
'''1、三种选择某一选项项的方法'''select_by_index()           # 通过索引定位;注意:index索引是从“0”开始。
select_by_value()           # 通过value值定位,value标签的属性值。
select_by_visible_text()    # 通过文本值定位,即显示在下拉框的值。'''2、三种返回options信息的方法'''options                     # 返回select元素所有的options
all_selected_options        # 返回select元素中所有已选中的选项
first_selected_options      # 返回select元素中选中的第一个选项                  '''3、四种取消选中项的方法'''deselect_all                # 取消全部的已选择项
deselect_by_index           # 取消已选中的索引项
deselect_by_value           # 取消已选中的value值
deselect_by_visible_text    # 取消已选中的文本值

六、多窗口切换

比如同一个页面的不同子页面的节点元素获取操作,不同选项卡之间的切换以及不同浏览器窗口之间的切换操作等等。

(一)Frame切换

Selenium打开一个页面之后,默认是在父页面进行操作,此时如果这个页面还有子页面,想要获取子页面的节点元素信息则需要切换到子页面进行擦走,这时候switch_to.frame()就来了。如果想回到父页面,用switch_to.parent_frame()即可。

(二)选项卡切换

我们在访问网页的时候会打开很多个页面,在Selenium中提供了一些方法方便我们对这些页面进行操作。

current_window_handle:获取当前窗口的句柄。
window_handles:返回当前浏览器的所有窗口的句柄。
switch_to_window():用于切换到对应的窗口。
from selenium import webdriver
import timebrowser = webdriver.Chrome()# 打开百度
browser.get('http://www.baidu.com')
# 新建一个选项卡
browser.execute_script('window.open()')
print(browser.window_handles)
# 跳转到第二个选项卡并打开知乎
browser.switch_to.window(browser.window_handles[1])
browser.get('http://www.zhihu.com')
# 回到第一个选项卡并打开淘宝(原来的百度页面改为了淘宝)
time.sleep(2)
browser.switch_to.window(browser.window_handles[0])
browser.get('http://www.taobao.com')

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 9月SCI/SSCI/EI最新期刊一览!二区SCI仅2个月录用,晋升/结项稳了!
  • ffmpeg音视频开发从入门到精通——常用结构体介绍(一)
  • session机制
  • TikTok直播为什么要用独立IP
  • 《机器学习》—— SVD奇异值分解方法对图像进行压缩
  • 【开发工具】开发过程中,怎么通过Easy JavaDoc快速生成注释。
  • 【网络安全 | 甲方建设】SaaS平台、Jira工具及Jenkins服务器
  • 2024年了,软件测试已经饱和了?
  • 2024全国大学省数学建模竞赛A题-原创参考论文(部分+第一问代码)
  • 考研408《计算机组成原理》复习笔记,第一章计算机系统概述
  • C语言 int uint16_t 踩坑记录
  • docker拉取redis5.0.5并建立redis集群
  • 13款常用AI编程工具
  • Opencv中的直方图(5)计算EMD距离的函数EMD()的使用
  • 数学建模常用工具总结
  • IE9 : DOM Exception: INVALID_CHARACTER_ERR (5)
  • - C#编程大幅提高OUTLOOK的邮件搜索能力!
  • CoolViewPager:即刻刷新,自定义边缘效果颜色,双向自动循环,内置垂直切换效果,想要的都在这里...
  • HTML-表单
  • Java 23种设计模式 之单例模式 7种实现方式
  • JavaScript对象详解
  • Odoo domain写法及运用
  • python 装饰器(一)
  • react-core-image-upload 一款轻量级图片上传裁剪插件
  • web标准化(下)
  • 彻底搞懂浏览器Event-loop
  • 第十八天-企业应用架构模式-基本模式
  • 每个JavaScript开发人员应阅读的书【1】 - JavaScript: The Good Parts
  • 你不可错过的前端面试题(一)
  • 前端每日实战:70# 视频演示如何用纯 CSS 创作一只徘徊的果冻怪兽
  • 实战|智能家居行业移动应用性能分析
  • 我这样减少了26.5M Java内存!
  • 06-01 点餐小程序前台界面搭建
  • “十年磨一剑”--有赞的HBase平台实践和应用之路 ...
  • #QT(智能家居界面-界面切换)
  • (26)4.7 字符函数和字符串函数
  • (3) cmake编译多个cpp文件
  • (bean配置类的注解开发)学习Spring的第十三天
  • (Charles)如何抓取手机http的报文
  • (Java企业 / 公司项目)点赞业务系统设计-批量查询点赞状态(二)
  • (Matalb时序预测)WOA-BP鲸鱼算法优化BP神经网络的多维时序回归预测
  • (ZT)薛涌:谈贫说富
  • (八)五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (排序详解之 堆排序)
  • (五)Python 垃圾回收机制
  • (转) RFS+AutoItLibrary测试web对话框
  • *上位机的定义
  • .Net Remoting常用部署结构
  • .NET开源项目介绍及资源推荐:数据持久层
  • .NET设计模式(2):单件模式(Singleton Pattern)
  • ::什么意思
  • @RestControllerAdvice异常统一处理类失效原因
  • [ vulhub漏洞复现篇 ] Apache Flink目录遍历(CVE-2020-17519)
  • [<事务专题>]
  • [28期] lamp兄弟连28期学员手册,请大家务必看一下