这样教都不会?还得我亲自出马!

简介: 上次说到了还有别的方法能找到搜索框吗?答案是当然有了。而且为了满足大部分场景,有很多方法可以定位元素。今天就来继续跟大家一起学习下 Python 如何使用 Selenium 进行自动化操控浏览器。

定位元素

如果想操作一个网页上面的一个元素,无论点击、输入、拖拽等等任何操作,第一步就是定义元素。因为每个元素对象又包含很多个属性,所以我们就能通过这些属性一项或几项轻松的找到它。

以下是几种常用的定位元素的方法:

  • find_element_by_id():通过元素的 id 属性来定位,这是最常见的定位方式,一般网页包含的所有元素中,id 属性是唯一的,定位速度快而且准确,首选推荐。
  • find_element_by_name():通过元素的 name 属性来定位,这是次要推荐方式,有些元素没有 id ,但基本都有 name,但可能存在重名。
  • find_element_by_class_name():通过元素的 class 属性来定位,一般 HTML 中元素都会有 class 用来做样式描述。
  • find_element_by_link_text():这个是通过 <a> 对应的链接文本对象来定位的,仅用于文本有超链接的时候。
  • find_element_by_partial_link_text():同 find_element_by_link_text() 相似,但可以只是超链接文本的一部分。
  • find_element_by_tag_name():可以通过元素的 tag name 来定位,但这个很容易会重复,同时返回多个元素。
  • find_element_by_css_selector():这个是通过 css 来定位的。CSS 是一种样式表语言,用来渲染元素样式的,是网页元素的重要组成部分。
  • find_element_by_xpath():这是一种可以通过 HTML 结构进行定位,可以通过根节点开始一层层定位,找到最终的元素。但这种方式在文档结构产生变化的时候可能会失效,所以不太推荐。

这么多的定位方法,基本上就能满足大部分场景的需求了。还有一些其他的方法这里就不再说了。

下面我把这些定位的例子列出来,大家就能知道该如何使用:


// 导入 webdriver
from selenium import webdriver
// executable_path 用于指定driver存放路径
browser = webdriver.Chrome(executable_path='/Users/xx/python/chromedriver')
// 打开百度页面
browser.get('https://wwww.baidu.com/')
// 在搜索框内输入 `python selenium` 并点搜索返回结果
browser.find_element_by_id("kw").send_keys("python selenium")
// name 属性定位
browser.find_element_by_name("wd").send_keys("python selenium")
// class name 属性定位
browser.find_element_by_class_name("s_ipt").send_keys("python selenium")
// 链接 text 属性定位
browser.find_element_by_link_text("关于百度").click()
// tag name 属性定位
browser.find_element_by_tag_name("input").send_keys("python selenium")
// CSS 方式定位
browser.find_element_by_css_selector("#kw").send_keys("python selenium")
// xpath 方式定位
browser.find_element_by_xpath("//input[@id='kw']").send_keys("python selenium")
// 点击 百度一下 按钮
browser.find_element_by_id("su").click()


元素是定位到了,接下来就是看要如何操作元素对象了


操作元素

上面我们说了元素是怎么定位找到的,那定位找到元素以后,我们又能对它进行什么操作呢,下面我就来一个个说下:

  • send_keys():这是最常用的,就是对元素模拟按键操作,输入你参数中传入的字符串,主要用来操作文本输入框时使用。
  • click():这个方法也是比较常用的,就是对元素对象进行鼠标单击操作,主要用来操作按钮或超链接文本时使用。
  • submit():如果是操作表单,则可以调用这个方法进行表单内容提交。
  • clear():如果对象有可以清除的内容,比如文本输入框,则清除已输入的内容。
  • text():这个方法主要用来获取元素的文本内容。


操作实例

好了,上面介绍那么多,现在我们来看一个实际的例子:

让浏览器自动输入 https://www.jd.com/,打开京东官网,然后搜索 ps5国行,并把搜索出来商品的名称和金额打印出来。

例子不复杂,我们直接来看代码:


# 导入库
from selenium import webdriver
import time
# executable_path 用于指定driver存放路径
browser = webdriver.Chrome(executable_path='/Users/xx/python/chromedriver')
# 打开京东官网
browser.get('https://www.jd.com/')
# browser.find_element_by_id("kw").send_keys("python selenium")
# 获取输入框对象
search = browser.find_element_by_xpath('//*[@id="key"]')
# 输入想要搜索的关键词,如"ps5国行"
search.send_keys('ps5国行')
# 获取搜索按钮对象并单击
browser.find_element_by_xpath('//*[@id="search"]/div/div[2]/button').click()
# 将滚动条移动到页面底部,用于加载所有信息
javascript = "var q=document.documentElement.scrollTop=50000"
# 执行 javascript 移动滚动条
browser.execute_script(javascript)
# 等待3秒,有些异步加载的数据加载慢
time.sleep(3)
# 通过查看页面源码得到金额的 xpath 路径,并获取金额 
prices = browser.find_elements_by_xpath('//*[@id="J_goodsList"]/ul/li/div/div[2]/strong/i')
# 通过查看页面源码得到商品标题的 xpath 路径,并获取商品标题
names = browser.find_elements_by_xpath('//*[@id="J_goodsList"]/ul/li/div/div[3]/a/em')
# 遍历打印出当前页所有标题和金额
for name,price in zip(names,prices):
    print(name.text.replace('\n',''),price.text)
#退出浏览器
browser.quit()

代码中我已经对每一行做了注释,让大家能看明白每一行都是做什么的。接下来我们直接运行代码 python test.py,可以看到浏览器自动启动后,执行相关操作,然后退出,下面是执行中的截图:

62.png

执行完成后,我们可以看到控制台已经打印出来相应信息:

63.png


总结

好了,今天我们又介绍了下 selenium 定位元素的多种方法,以及我们找到元素后,可以对它进行什么操作。并写了一个自动化操作的简单例子,给大家学习参考,后续还会为大家介绍更多。OK,今天就聊这些,如果你喜欢记得点 在看

目录
相关文章
|
JavaScript
通过gm来批量拼接图片,两张合并一张
刚好在做类似的事情,找了一部分绘本,想将绘本内的图片全部取出来合并。 我是通过nodejs调用gm模块来实现的拼接,命令很简单。
通过gm来批量拼接图片,两张合并一张
|
4月前
|
UED
网络性能指标
本内容详细介绍了网络性能中的三个关键指标:时延、抖动和丢包率。时延指数据传输所需时间,影响实时性;抖动表示延迟变化程度,反映网络稳定性;丢包率衡量数据丢失比例,评估传输可靠性。这些指标对在线游戏、视频会议等实时应用至关重要,高时延、大抖动或高丢包率会显著降低用户体验。通过类比快递寄送和语音通话,清晰解释了各指标的定义及应用场景。
461 8
|
2月前
|
传感器 机器学习/深度学习 人工智能
从仿真到现实:数字孪生解锁具身AI全景应用
Embodied AI正在重塑智能机器人系统的格局,尤其通过为复杂且动态的环境中的行动执行提供许多现实可行的解决方案。然而,具身AI需要生成大量数据用于训练和评估,以确保其与物理环境交互的安全性。因此,有必要构建一个成本效益高的模拟环境,能够从物理特性、物体属性及交互中提供充足的训练和优化数据。Digital Twins是工业5.0中的关键议题,它通过镜像真实世界对应体的状态和行动,实现对物理过程的实时监控、模拟与优化。本综述探讨了将数字孪生与具身AI结合的方式,通过将虚拟环境转化为动态且数据丰富的平台,弥合仿真与现实之间的差距。
294 7
|
4月前
|
JavaScript 前端开发 Java
HarmonyOS NEXT~鸿蒙系统下的Cordova框架应用开发指南
《HarmonyOS NEXT:鸿蒙系统下的Cordova框架应用开发指南》详细介绍如何将Cordova应用适配到鸿蒙系统。文章涵盖兼容性分析、环境配置、特性适配、性能优化及发布调试等内容。尽管Cordova官方暂无直接支持,但通过Cordova-Android平台与定制插件可实现功能扩展。开发者需注意性能差异,并借助插件机制融入鸿蒙特色功能,如服务卡片和分布式能力。未来,随着鸿蒙生态完善,Cordova在该平台的应用将更加广泛且高效。
301 1
|
云安全 数据采集 安全
阿里云安全产品,Web应用防火墙与云防火墙产品各自作用简介
阿里云提供两种关键安全产品:Web应用防火墙和云防火墙。Web应用防火墙专注网站安全,防护Web攻击、CC攻击和Bot防御,具备流量管理、大数据防御能力和简易部署。云防火墙是SaaS化的网络边界防护,管理南北向和东西向流量,提供访问控制、入侵防御和流量可视化。两者结合可实现全面的网络和应用安全。
阿里云安全产品,Web应用防火墙与云防火墙产品各自作用简介
|
人工智能 安全 算法
专访电享科技朱卓敏:用虚拟电厂搭建用户与大电网互动的“桥梁”
摘要:电享科技作为一家新型电力系统能源数字化AI创新企业,致力于新一代能源控制与电池AI技术,解决分布式储能领域快速发展中的调配失衡与价值回报难题,通过Energy AI为碳中和基础设施投资者提高IRR,快速驱动市场扩张。
539 1
专访电享科技朱卓敏:用虚拟电厂搭建用户与大电网互动的“桥梁”
|
Python
【开发环境】Mac 中 IntelliJ IDEA 运行 Python 程序 ( 安装 Python Community Edition 插件 )
【开发环境】Mac 中 IntelliJ IDEA 运行 Python 程序 ( 安装 Python Community Edition 插件 )
850 0
【开发环境】Mac 中 IntelliJ IDEA 运行 Python 程序 ( 安装 Python Community Edition 插件 )
|
IDE Java Shell
xxl-job 编写定时任务
xxl-job 编写定时任务
915 0
|
存储 SQL 缓存
Apache Hudi 设计与架构最强解读
Apache Hudi(简称:Hudi)使得您能在hadoop兼容的存储之上存储大量数据,同时它还提供两种原语,使得除了经典的批处理之外,还可以在数据湖上进行流处理。
1761 0
Apache Hudi 设计与架构最强解读
|
消息中间件 存储 SQL
万字总结!Python 实现定时任务的八种方案(下)
万字总结!Python 实现定时任务的八种方案(下)
994 0
万字总结!Python 实现定时任务的八种方案(下)