系列文章目录
暂空
文章目录
前言
Selenium 是一个用于自动化 web 应用程序测试的工具和框架,它直接运行在浏览器中,就像真正的用户在操作一样。
selenium常用于自动化测试,对于爬虫来说,因为原本的网络请求包(request等)在遇到如图片验证、输入框输入等情况时无法进行操作,所以有了selenium。
所以,我们简单看一下selenium是如何定位元素的。后续会更新其他操作。
一、环境准备
1.浏览器驱动安装
因为selenium是模拟用户操控浏览器,所以seleniu运行前需要先安装浏览器驱动。驱动的版本需要与自己浏览器的版本对应。这里以谷歌为例。
以下是下载地址:
国内常用网址:
谷歌驱动
如果找不到自己所需版本,则使用以下地址:
谷歌驱动
浏览器的驱动下载后是一个可执行文件:
需要把下载后的驱动放在爬虫程序文件同级目录下,若不在同级目录则要在环境变量path内写入对应路径。
2.模块安装
使用pip工具安装selenium模块(或者conda),对应命令如下:
pip install selenium
如果下载速度过慢,可以尝试更换下载源。
3.在程序中导入模块包
要使用selenium模块包,需要先进行导入。selenium的相关方法都封装在webdriver下的类中。所以我们先需要根据自己浏览器和驱动的实际情况,创建出一个对应的对象。对应代码如下:
from selenium import webdriver
driver=webdriver.Chrome()
这里因为是要使用谷歌浏览器进行操作,所以使用Chrome()创建对象。后面我们就可以直接使用driver对象来使用selenium功能。
这里创建出对象后就可以使用selenium的功能,你可以控制页面跳转,打开新的页面等,但这里先不赘述,本篇文章主要介绍selenium中定位元素的方法。
二、定位元素
selenium是模拟用户操作页面元素的工具,想要操作元素,就先要找到要操作的元素。
1.ID定位
selenium可以使用dom元素的id属性来定位一个dom元素,这里的id属性是唯一的,各个元素之间不会重复。
假设有如下一个标签:
<input id=“toolbar-search-input” autocomplete=“off” type=“text” value=“” placeholder=“C++难在哪里?”>
则我们可以使用如下方法进行定位:
driver.find_element(by="id",value="toolbar-search-input")
2.name定位
name也是标签的属性之一,一般用于标识表单中的元素。我们也可以使用它定位元素。
假设有如下一个标签:
<meta name=“keywords” content=“CSDN博客,CSDN学院,CSDN论坛,CSDN直播”>
则可以用如下方法定位:
driver.find_element(by="name",value="keywords")
3.class定位
class也是html标签的属性之一,一般一个页面中会有多个同class的标签。这个时候就适合使用class定位来批量获取
比如有以下标签
<div class=“toolbar-search-container”>
则可以如下定位
driver.find_element(by="class name",value="toolbar-search-container")
但使用find_element方法只会返回匹配的第一个元素,对于class属性可以使用find_elements方法来获取所有匹配的元素。即:
driver.find_elements(by="class name",value="toolbar-search-container")
4.tag(标签定位)
tag定位也就是标签定位,通过标签名(比如div)定位元素。
但一个页面中的同类标签是非常多的,一般先使用其他定位法定义到外层元素缩小范围后,再使用tag来定位真正要用的元素。
driver.find_element_by_tag_name("div")
5.xpath定位
我们知道页面渲染出的元素,最终会形成一个dom树,各元素标签间层层嵌套。而xpath定位就是根据dom树来定位元素的方式。
我们可以直接在开发者工具中获取元素对应的xpath:
xpath规则
6.CSS定位
在编写前端程序时,最常用的定位方式——css,selenium中也是支持使用css来完成元素定位的.
比如以下是使用id选择器定位一个元素
driver.find_element(By.CSS_SELECTOR, '#id_value')
7.link定位
link定位法用于快速定位链接标签(<a\>),
可以根据链接内的内容来定位链接。
比如有以下标签:
<a class=“”">加入!每日一练</a>
则可以如下定位
driver.find_element(by="link text",value="加入!每日一练")
我们也可以使用prartical link定位,这让我们不用输入所有链接的内容,即
driver.find_element(by="partial link text",value="加入")
总结
我们简单介绍了一下selenium中定位元素的几种方法,这是我们使用selenium操控页面的前提。