Selenium入门介绍
目录
Selenium概述
https://github.com/SeleniumHQ/selenium
https://www.selenium.dev/documentation/en/
Selenium是常用的Web自动化测试方案,也可以用来抓取一些页面数据。
三要素:WebDriver,IDE,Grid。
浏览器支持
1.真实浏览器
Chrome,Chromium,Firefox,Internet Explorer,Opera,Safari
2.模拟浏览器
HtmlUnit:Java语言绑定。
https://htmlunit.sourceforge.io/
PhantomJS:
工具库
1.Beautiful Soup
从HTML或XML文件中提取数据。
https://beautifulsoup.readthedocs.io/zh_CN/v4.4.0/ Beautiful Soup 4.4.0 文档
2.requests/urlib2
下载指定url的数据。
开发实践
第一步:安装Python
https://www.runoob.com/python/python-tutorial.html Python基础教程
https://www.python.org/downloads/ Python官网下载地址
将${PYTHON_HOME}和${PYTHON_HOME}/Scripts目录添加到PATH变量中。
python --version
Python 3.9.6
pip --version
pip 21.1.3 from d:\python39\lib\site-packages\pip (python 3.9)
第二步:安装selenium
pip install selenium
Collecting selenium
Downloading selenium-3.141.0-py2.py3-none-any.whl (904 kB)
|████████████████████████████████| 904 kB 64 kB/s
Collecting urllib3
Downloading urllib3-1.26.6-py2.py3-none-any.whl (138 kB)
|████████████████████████████████| 138 kB 94 kB/s
Installing collected packages: urllib3, selenium
Successfully installed selenium-3.141.0 urllib3-1.26.6
第三步:安装浏览器驱动
下载chrome浏览器驱动:https://sites.google.com/a/chromium.org/chromedriver/downloads
国内镜像:http://npm.taobao.org/mirrors/chromedriver/
将驱动程序路径添加到系统PATH变量中:
chromedriver --version
ChromeDriver 91.0.4472.101 (af52a90bf87030dd1523486a1cd3ae25c5d76c9b-refs/branch-heads/4472@{#1462})
第四部:在项目中调用浏览器驱动API访问页面,操作元素等操作
创建Python项目,实战Selenium操作浏览器。
https://www.selenium.dev/documentation/en/webdriver/
https://www.selenium.dev/documentation/en/driver_idiosyncrasies/ 驱动特性
等待
浏览器在加载页面时需要一定的时间,因此在Selenium中定位页面元素时也需要一定的等待时长,已确保页面被正常加载完毕并且可以定位到目标元素。
有4种实现等待的方式:
1.进程等待:
import time
time.sleep(10)
2.显示等待:设置一个满足某个条件的显示等待
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
WebDriverWait(driver, timeout=10).until(EC.element_to_be_clickable((By.ID, 'content_left')))
3.隐式等待
driver.implicitly_wait(3)
4.FluentWait等待
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
wait = WebDriverWait(driver, timeout=10, poll_frequency=1)
wait.until(EC.element_to_be_clickable((By.ID, 'content_left')))
特别注意:
Selenium中的显示等待和隐式等待不能一起混合使用,否则将可能会带来一起超出预期的效果。
定位元素
Selenium提供了8种不同的内置元素定位策略,如下所示。
假设DOM内容如下:
<ol id=cheese class="clazz1 clazz2">
<li id=cheddar name="cheddar">…
<li id=brie>…
<li id=rochefort>…
<li id=camembert>…
<li>
<a href="">test</a>
</li>
</ol>
定位单个元素
1.按元素ID定位
# 只定位一次目标元素
driver.find_element(By.ID, "cheese")
# 先定位到父元素,再缩小查找范围继续按ID定位元素
cheese = driver.find_element(By.ID, "cheese")
cheddar = cheese.find_element(By.ID, "cheddar")
2.根据css定位
cheddar = driver.find_element(By.CSS_SELECTOR, "#cheese #cheddar")
3.根据Class名称定位
# 查找元素的Class名称中包含指定值的元素,注意:传递的参数不能是一个复合class,如:'clazz1 clazz2'
driver.find_element(By.CLASS_NAME, 'clazz1')
4.根据元素Name属性定位
# 定位name属性匹配指定值的元素
driver.find_element(By.NAME, 'cheddar')
5.根据元素可视化文本定位
# 完全匹配元素可视化文本定位
driver.find_element(By.LINK_TEXT, 'test')
6.根据元素可视化文本子集定位
# 根据元素可视化文本部分字段值定位
driver.find_element(By.PARTIAL_LINK_TEXT, 'te')
7.根据元素标签名称定位
# 定位所有a标签元素
driver.find_element(By.TAG_NAME, 'a')
8.根据xpath表达式定位
# 根据xpath表达式定位
driver.find_element(By.XPATH, xpath表达式)
除了上述内置元素定位策略之外,Selenium 4还支持元素相对位置定位的方法。
使用CSS和Class定位时,可以使用SelectorGadget辅助获取。
使用XPath定位时,可以直接使用Chrome自带的开发者工具,选择元素之后复制对应的Xpath信息。
定位多个元素
在定位多个元素时跟定位单个元素使用相同的策略,不同之处在于返回值不再是单个元素,而是一个元素列表。
# 定位多个元素时返回一个列表,如果定位到的元素只有一个,也是返回一个列表(此时列表元素个数为1)
# 如果没有找到目标元素,则返回一个空列表
mucho_cheese = driver.find_elements(By.CSS_SELECTOR, "#cheese li")
获取HTML元素内容的方式
span:get_attribute('textContent')
textarea:get_attribute('textContent')
a:get_attribute('textContent')
p:get_attribute('textContent')
b:get_attribute('textContent')
h2:get_attribute('innerHTML'),获取纯文本内容:text,如:driver.find_element_by_xpath('xxx').text
div:get_attribute('innerHTML'),获取纯文本内容:text,如:driver.find_element_by_xpath('xxx').text
table.td:get_attribute('innerHTML'),获取纯文本内容:text,如:driver.find_element_by_xpath('xxx').text
em:get_attribute('innerHTML'),获取纯文本内容:text,如:driver.find_element_by_xpath('xxx').text
注意:属性get_attribute('innerHTML')获取的是该HTML标签以及所有子节点内容,结果是HTML标签内容。
另外,还可以使用多个class名称定位元素:
driver.find_elements_by_css_selector("div[class='value test']")
详见:Find div element by multiple class names?
【参考】
https://www.cnblogs.com/deliaries/p/14121204.html selenium加载cookie报错问题
Selenium入门介绍的更多相关文章
- [Python爬虫] scrapy爬虫系列 <一>.安装及入门介绍
前面介绍了很多Selenium基于自动测试的Python爬虫程序,主要利用它的xpath语句,通过分析网页DOM树结构进行爬取内容,同时可以结合Phantomjs模拟浏览器进行鼠标或键盘操作.但是,更 ...
- 自动化测试Java一:Selenium入门
From: https://blog.csdn.net/u013258415/article/details/77750214 Selenium入门 欢迎阅读Selenium入门讲义,本讲义将会重点介 ...
- Selenium自动化测试Python一:Selenium入门
Selenium入门 欢迎阅读Selenium入门讲义,本讲义将会重点介绍Selenium的入门知识以及Selenium的前置知识. 自动化测试的基础 在Selenium的课程以前,我们先回顾一下软件 ...
- Selenium 工具介绍、安装、配置及使用
概念 selenium是一款跨平台开源工具,用于web的功能完整性測试,想做压力測试的能够换软件了 先看一眼官方站 http://docs.seleniumhq.org/download/ 首先要FQ ...
- web自动化-selenium 入门篇
selenium安装介绍 selenium是web浏览器的自动化工具 官网:https://www.selenium.dev 构成: WebDriver: 浏览器提供的浏览器api来控制浏览器(模拟用 ...
- C# BackgroundWorker组件学习入门介绍
C# BackgroundWorker组件学习入门介绍 一个程序中需要进行大量的运算,并且需要在运算过程中支持用户一定的交互,为了获得更好的用户体验,使用BackgroundWorker来完成这一功能 ...
- 初识Hadoop入门介绍
初识hadoop入门介绍 Hadoop一直是我想学习的技术,正巧最近项目组要做电子商城,我就开始研究Hadoop,虽然最后鉴定Hadoop不适用我们的项目,但是我会继续研究下去,技多不压身. < ...
- [Python爬虫] 在Windows下安装PhantomJS和CasperJS及入门介绍(上)
最近在使用Python爬取网页内容时,总是遇到JS临时加载.动态获取网页信息的困难.例如爬取CSDN下载资源评论.搜狐图片中的“原图”等,此时尝试学习Phantomjs和CasperJS来解决这个问题 ...
- JavaScript入门介绍(二)
JavaScript入门介绍 [函数] 函数function 是Javascript的基础模块单元,用于代码的复用.信息影藏和组合调用. function a(){} 函数对象Function Lit ...
- JavaScript入门介绍(一)
JavaScript入门介绍 [经常使用的调试工具][w3school.com.cn在线编辑] [Chrome浏览器 开发调试工具]按F121.代码后台输出调试:console.log("t ...
随机推荐
- 【转帖】如何使用route管理路由表
这里是引用 route快捷使用方法 我们一般管理路由有使用route命令 本身route使用大致有两种方法:但其实 在实际操作中,我们熟练掌握一种方法就可以了. route 有以下6种操作方法: 1) ...
- python+selenium+opencv验证滑块
我们在使用selenium爬虫的时候在登录时经常会遇到滑块验证码问题,导致登录受阻,正所谓万事开头难. 登录就登录不进去更别提往后的操作的.今天以登录京东后台来演示下如何破解滑块. 一.登录 首先我们 ...
- 火狐谷歌浏览器去掉input type=number时控件的方法
html 默认:<input type="number" /></br> 处理:<input type="number" clas ...
- 【小测试】玩一玩 VictoriaMetrics 的 force merge
作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 我是期望通过备份来建立 VictoriaMetrics 的 ...
- 学到一个编码技巧:用重复写入代替if判断,减少程序分支
作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 近期阅读了rust标准库的hashbrown库(也就是一个 ...
- Linux挂载新磁盘到根目录
1.添加磁盘到需要挂载的机器上2.lsblk查看硬盘挂载情况,sdb,sdc为我新挂载的磁盘 3.fdisk -l查看挂载之前的分区情况, 4.为新硬盘创建分区 fdisk /dev/sdb,终端会提 ...
- PicoPixel贴图查看器
Pico Pixel Pico Pixel是一款纹理查看器,支持查看以下文件格式:TGA,BMP,JPG,DDS,PNG,OpenEXR, KTX, HDR, GIF, TIF. 此外,Pico Pi ...
- 【一】tensorflow【cpu/gpu、cuda、cudnn】全网最详细安装、常用python镜像源、tensorflow 深度学习强化学习教学
相关文章: [一]tensorflow安装.常用python镜像源.tensorflow 深度学习强化学习教学 [二]tensorflow调试报错.tensorflow 深度学习强化学习教学 [三]t ...
- Flask 框架:运用WTForms实现用户注册
WTForms 是用于web开发的灵活的表单验证和呈现库,它可以与您选择的任何web框架和模板引擎一起工作,并支持数据验证.CSRF保护.国际化等,运用WTForms框架并配合Flask可实现一个带有 ...
- 基于.NET的机械运动模拟应用开发
1 简介 机械运动在物理学中,把一个物体相对于另一个物体位置的变化称作为机械运动,简称运动.机械运动是指一个物体相对于其他物体的位置发生改变,是自然界中最简单,最基本的运动形态. 自然界中一切物体都在 ...