目录

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:

https://phantomjs.org/

工具库

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入门介绍的更多相关文章

  1. [Python爬虫] scrapy爬虫系列 <一>.安装及入门介绍

    前面介绍了很多Selenium基于自动测试的Python爬虫程序,主要利用它的xpath语句,通过分析网页DOM树结构进行爬取内容,同时可以结合Phantomjs模拟浏览器进行鼠标或键盘操作.但是,更 ...

  2. 自动化测试Java一:Selenium入门

    From: https://blog.csdn.net/u013258415/article/details/77750214 Selenium入门 欢迎阅读Selenium入门讲义,本讲义将会重点介 ...

  3. Selenium自动化测试Python一:Selenium入门

    Selenium入门 欢迎阅读Selenium入门讲义,本讲义将会重点介绍Selenium的入门知识以及Selenium的前置知识. 自动化测试的基础 在Selenium的课程以前,我们先回顾一下软件 ...

  4. Selenium 工具介绍、安装、配置及使用

    概念 selenium是一款跨平台开源工具,用于web的功能完整性測试,想做压力測试的能够换软件了 先看一眼官方站 http://docs.seleniumhq.org/download/ 首先要FQ ...

  5. web自动化-selenium 入门篇

    selenium安装介绍 selenium是web浏览器的自动化工具 官网:https://www.selenium.dev 构成: WebDriver: 浏览器提供的浏览器api来控制浏览器(模拟用 ...

  6. C# BackgroundWorker组件学习入门介绍

    C# BackgroundWorker组件学习入门介绍 一个程序中需要进行大量的运算,并且需要在运算过程中支持用户一定的交互,为了获得更好的用户体验,使用BackgroundWorker来完成这一功能 ...

  7. 初识Hadoop入门介绍

    初识hadoop入门介绍 Hadoop一直是我想学习的技术,正巧最近项目组要做电子商城,我就开始研究Hadoop,虽然最后鉴定Hadoop不适用我们的项目,但是我会继续研究下去,技多不压身. < ...

  8. [Python爬虫] 在Windows下安装PhantomJS和CasperJS及入门介绍(上)

    最近在使用Python爬取网页内容时,总是遇到JS临时加载.动态获取网页信息的困难.例如爬取CSDN下载资源评论.搜狐图片中的“原图”等,此时尝试学习Phantomjs和CasperJS来解决这个问题 ...

  9. JavaScript入门介绍(二)

    JavaScript入门介绍 [函数] 函数function 是Javascript的基础模块单元,用于代码的复用.信息影藏和组合调用. function a(){} 函数对象Function Lit ...

  10. JavaScript入门介绍(一)

    JavaScript入门介绍 [经常使用的调试工具][w3school.com.cn在线编辑] [Chrome浏览器 开发调试工具]按F121.代码后台输出调试:console.log("t ...

随机推荐

  1. [转帖]Ceph优化系列(四):RocksDB 使用 ARM 64 位 CRC32C 硬件优化指令

    一.前言 CRC32(A cyclic redundancy check 32)应用于校验,为了保证数据的正确性,采用的一种检错手段. CRC32C (CRC32 Castagnoli)  与 CRC ...

  2. [转帖]【JVM】JDK命令行工具

    在JDK/bin目录下我发现了许多命令行工具 这些命令有哪些作用呢,接下来我就来详细介绍一下 常用JDK命令行工具 命令名称 全称 用途 jstat JVM Statistics Monitoring ...

  3. React中事件的绑定

    事件绑定 语法:on +事件名= { ()=>{ do something }} <!-- 点击事件 --> onClick={ () => { } } 注意的是:React采 ...

  4. Object.defineProperty熬夜整理的用法,保证你看的明白!

    Object.defineProperty的基本使用 <script> let personObj={ name:'何西亚', sex:'男' } //我们想给这个对象添加一个属性 // ...

  5. 【JS 逆向百例】转变思路,少走弯路,X米加密分析

    声明 本文章中所有内容仅供学习交流,抓包内容.敏感网址.数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除! 逆向目标 目标:X米账号登 ...

  6. P7900 [COCI2006-2007#2] SJECIŠTA_题解

    [COCI2006-2007#2] SJECIŠTA_题解 rt 我们来看一下题目描述 考虑一个有 \(n\) 个顶点的凸多边形,且这个多边形没有任何三个(或以上) 的对角线交于一点. 这句话什么意思 ...

  7. 为游戏接入ios sdk的oc学习笔记

    开发手机游戏,需要接入ios的sdk,截止2021年7月23日虽然swift已经推出一些年头,但对于大部分的渠道sdk,还是oc的代码. oc不仅仅用来开发ios,还是mac上的app开发语言 从新手 ...

  8. vs2019系统内置方法无提示

    有个同事问我为什么他的vs编写C#代码,对于引用System.dll中的方法,鼠标移上去没有方法的使用说明或接口注释,具体可以看下面的截图,而我绝大多数情况下是使用Rider开发,并没有遇到这个问题, ...

  9. 遥感图像处理笔记之【Сrор field boundary detection: approaches and main challenges】

    遥感图像处理学习(6) 前言 遥感系列第6篇.遥感图像处理方向的学习者可以参考或者复刻 本文初编辑于2023年12月16日 2024年1月24日搬运至本人博客园平台 文章标题:Сrор field b ...

  10. 一个 WPF + MudBlazor 的项目模板(附:多项目模板制作方法)

    最近做了几个 WPF + MudBlazor 的小东西,每次从头搭建环境比较繁琐,然鹅搭建过程还没啥技术含量,索性就直接做了个模板,方便以后使用. 1. 介绍 一个用来创建 .NET 8 + WPF ...