前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Selenium入门介绍

Selenium入门介绍

作者头像
编程随笔
修改2021-07-20 10:18:42
2.4K0
修改2021-07-20 10:18:42
举报
文章被收录于专栏:后端开发随笔后端开发随笔

目录

Selenium概述

https://github.com/SeleniumHQ/selenium https://www.selenium.dev/documentation/en/

三要素: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.进程等待:

代码语言:javascript
复制
import time

time.sleep(10)

2.显示等待:设置一个满足某个条件的显示等待

代码语言:javascript
复制
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.隐式等待

代码语言:javascript
复制
driver.implicitly_wait(3)

4.FluentWait等待

代码语言:javascript
复制
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内容如下:

代码语言:javascript
复制
<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定位

代码语言:javascript
复制
# 只定位一次目标元素
driver.find_element(By.ID, "cheese")

# 先定位到父元素,再缩小查找范围继续按ID定位元素
cheese = driver.find_element(By.ID, "cheese")
cheddar = cheese.find_element(By.ID, "cheddar")

2.根据css定位

代码语言:javascript
复制
cheddar = driver.find_element(By.CSS_SELECTOR, "#cheese #cheddar")

3.根据Class名称定位

代码语言:javascript
复制
# 查找元素的Class名称中包含指定值的元素,注意:传递的参数不能是一个复合class,如:'clazz1 clazz2'
driver.find_element(By.CLASS_NAME, 'clazz1')

4.根据元素Name属性定位

代码语言:javascript
复制
# 定位name属性匹配指定值的元素
driver.find_element(By.NAME, 'cheddar')

5.根据元素可视化文本定位

代码语言:javascript
复制
# 完全匹配元素可视化文本定位
driver.find_element(By.LINK_TEXT, 'test')

6.根据元素可视化文本子集定位

代码语言:javascript
复制
# 根据元素可视化文本部分字段值定位
driver.find_element(By.PARTIAL_LINK_TEXT, 'te')

7.根据元素标签名称定位

代码语言:javascript
复制
# 定位所有a标签元素
driver.find_element(By.TAG_NAME, 'a')

8.根据xpath表达式定位

代码语言:javascript
复制
# 根据xpath表达式定位
driver.find_element(By.XPATH, xpath表达式)

除了上述内置元素定位策略之外,Selenium 4还支持元素相对位置定位的方法。

定位多个元素

在定位多个元素时跟定位单个元素使用相同的策略,不同之处在于返回值不再是单个元素,而是一个元素列表。

代码语言:javascript
复制
# 定位多个元素时返回一个列表,如果定位到的元素只有一个,也是返回一个列表(此时列表元素个数为1)
# 如果没有找到目标元素,则返回一个空列表
mucho_cheese = driver.find_elements(By.CSS_SELECTOR, "#cheese li")
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-07-14 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 目录
  • Selenium概述
  • 浏览器支持
  • 工具库
  • 开发实践
  • 等待
  • 定位元素
    • 定位单个元素
      • 定位多个元素
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档