seleninum 基础及简单实践

网页自动化

1 Selenium自动化基础

1.1 Selenium简介

在这里插入图片描述
Selenium自动化流程如下:

  1. 自动化程序调用Selenium客户端库函数
  2. 客户端库会发送Selenium命令,给浏览器的驱动程序
  3. 浏览器驱动程序接收到命令后,驱动浏览器去执行命令
  4. 浏览器执行命令
  5. 浏览器驱动程序获取命令执行的结果,返回给我们自动化程序
  6. 自动化程序对返回结果进行处理

1.2 Selenium安装
在这里插入图片描述
1)谷歌浏览器驱动
(2)课件提供好的谷歌浏览器和谷歌浏览器驱动软件
注意:谷歌浏览器驱动,要放到python解释器的安装目录下(也就是跟python.exe同一个目录下)

1.3获取某个网页页面

# 导入 webdriver
from selenium import webdriver #创建浏览器对象
driver = webdriver.Chrome(executable_path=r'C:\Users\nlp_1\Desktop\chromedriver\chromedriver-win32\chromedriver.exe')# get方法会一直等到页面被完全加载,然后才会继续程序。
driver.get('https://www.baidu.com')#  打印网页渲染后的源代码
print(driver.page_source)------------------------------------------------------
#  打印页面标题“百度一下,你就知道”
print(Driver.title)# 获取当前url
print(Driver.current_url)# 关闭当前页面,如果只有一个页面,会关闭浏览器
Driver.close()# 关闭浏览器
Driver.quit()

2、Selenium 数据解析提取

2.1 定位元素
Selenium提供了8种定位方式

  1. id
  2. name
  3. class name
  4. tag name
  5. link text
  6. xpath
  7. css selector
  8. partial link text

在这里插入图片描述
单属性查找:

**1.用 标签名 定位查找**
driver.find_element_by_css_selector("input")**2.id 属性定位查找**
driver.find_element_by_css_selector("kw")**3.class 属性定位查找**
driver.find_element_by_css_selector("s_ipt")**4.其他属性定位**
driver.find_element_by_css_selector("[name='wd']")

组合属性查找:

# 1. 标签名及id属性值组合定位
driver.find_element_by_css_selector("input#kw")# 2.  标签名及class属性值组合定位
driver.find_element_by_css_selector("input.s_ipt")# 3. 标签名及属性(含属性值)组合定位
driver.find_element_by_css_selector("input[name='wd']")# 4. 标签及属性名组合定位
driver.find_element_by_css_selector("input[name]")# 5. 多个属性组合定位
driver.find_element_by_css_selector("[class='s_ipt'][name='wd']")

在这里插入图片描述

模糊匹配:

# 1. class拥有多个属性值,只匹配其中一个时
driver.find_element_by_css_selector("input[class ~= "bg"]")# 2. 匹配以字符串开头的属性值
driver.find_element_by_css_selector("input[class ^= "bg"]")# 3. 匹配以字符串结尾的属性值
driver.find_element_by_css_selector("input[class $= "s_btn"]")# 4. 匹配被下划线分隔的属性值
driver.find_element_by_css_selector("input[class |= "s"]")

层级查找:

# 1.直接子元素层级关系,如上图的 百度一下 ,input为span的直接子元素(用 > 表示)
driver.find_element_by_css_selector(".bg.s_btn_wr > input")
# class为bg和s_btn_wr 的span标签的子元素input# 2.只要元素包含在父元素里面,不一定是直接子元素,用空格隔开,如图一所示,form 下面的 span 里面的input
driver.find_element_by_css_selector("#form input")
# id是form的form标签里面的input标签# 3.多级关系
driver.find_element_by_css_selector("#form > span > input")
# id是form的form标签下面的span标签的下面的input标签

2.1.2 多个元素查找

  1. find_elements_by_name 通过元素name定位
  2. find_elements_by_id 通过元素id定位
  3. find_elements_by_xpath 通过xpath表达式定位
  4. find_elements_by_link_text 通过完整超链接定位
  5. find_elements_by_partial_link_text 通过部分链接定位
  6. find_elements_by_tag_name 通过标签定位
  7. find_elements_by_class_name 通过类名进行定位
  8. find_elements_by_css_selector 通过css选择器进行定位

2.1.3 实例演示
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2.2 获取元素属性

from selenium import webdriver
browser = webdriver.Chrome()
url = 'https://www.baidu.com/'
browser.get(url)
input = browser.find_element_by_id('kw')
print(input)
print(input.get_attribute('name'))
print(input.get_attribute('class'))
print(input.get_attribute('id'))
print(input.get_attribute('maxlength'))
print(input.get_attribute('autocomplete'))
browser.close() 

2.3 获取文本值

Selenium WebDriver 只会与可见元素交互,所以获取隐藏元素的文本总是会返回空字符串。
要获取隐藏元素的文本,这些内容可以使用
element.get_attribute(‘innerHTML’),会返回元素的内部HTML,包含所有的HTML标签。element.get_attribute(‘textContent’),只会得到文本内容,而不会包含HTML。element.get_attribute(‘innerText’),只会得到文本内容,而不会包含HTML标签。

2.4 获取位置,ID,标签名

id
Location
Tag_name
Sizefrom selenium import webdriver
browser = webdriver.Chrome()
url = 'https://www.baidu.com/'
browser.get(url)
logo = browser.find_element_by_xpath('//div[@id="lg"]/img[@class="index-logo-src"]')
print(logo.id)
print(logo.tag_name)
print(logo.location)
print(logo.size) 

在这里插入图片描述

2.5 执行JavaScript

这是一个非常有用的方法,这里就可以直接调用js方法来实现一些操作,
下面的例子是通过登录知乎然后通过js翻到页面底部,并弹框提示from selenium import webdriver
browser = webdriver.Chrome()
browser.get("http://www.zhihu.com/explore")
print(browser.page_source)
browser.execute_script('window.scrollTo(0, document.body.scrollHeight)')
browser.execute_script('alert("To Bottom")') 

2.6截屏

from selenium import webdriver
driver = webdriver.Chrome()
driver.maximize_window()  #窗口最大化
driver.get(“https://blog.csdn.net/Kwoky/article/details/80285201)
driver.save_screenshot(./images/app2.png”)  #截屏

3 、Selenium自动化交互

3.1 鼠标动作链
在页面上模拟一些鼠标操作,比如双击、右击、拖拽甚至按住不动等,可以通过导入ActionChains类实现。
ActionChains执行原理
(1)当调用ActionChains的方法时不会立即执行,而是会将所有的操作按顺序存放在一个队列里,
(2)当你调用perform()方法时,队列中的时间会依次执行。
有两种写法本质上是一样的,ActionChains会按照顺序执行所有的操作。

#ActionChains方法列表
click(on_element=None) ——单击鼠标左键
click_and_hold(on_element=None) ——点击鼠标左键,不松开
context_click(on_element=None) ——点击鼠标右键
double_click(on_element=None) ——双击鼠标左键
drag_and_drop(source, target) ——拖拽到某个元素然后松开
drag_and_drop_by_offset(source, xoffset, yoffset) ——拖拽到某个坐标然后松开
key_down(value, element=None) ——按下某个键盘上的键
key_up(value, element=None) ——松开某个键
move_by_offset(xoffset, yoffset) ——鼠标从当前位置移动到某个坐标
move_to_element(to_element) ——鼠标移动到某个元素move_to_element_with_offset(to_element, xoffset, yoffset) ——移动到距某个元素(左上角坐标)多少距离的位置
perform() ——执行链中的所有动作
release(on_element=None) ——在某个元素位置松开鼠标左键
send_keys(*keys_to_send) ——发送某个键到当前焦点的元素
send_keys_to_element(element, *keys_to_send) ——发送某个键到指定元素 

3.2 案例:百度自动化搜索

# 导入 webdriver
from selenium import webdriver
# 调用环境变量指定的 Chrome 浏览器创建浏览器对象
driver = webdriver. Chrome ()
# get 方法会一直等到页面被完全加载,然后才会继续程序,通常测试会在这里选择
time.sleep(2)
driver.get("http://www.baidu.com/") 
# id=“kw”是百度搜索输入框,输入字符串“python”
driver.find_element_by_id(“kw”).send_keys(“python") # id=“su”是百度搜索按钮, click() 是模拟点击
driver.find_element_by_id(“su”).click()
# 获取新的页面快照
driver.save_screenshot(“python1.png”)
# 清除输入框内容
driver.find_element_by_id(“kw”).clear()
print(‘访问成功')

3.3 等待页面加载
Python内置的time库,time.sleep()方法可以强制等待。
Selenium 提供了两种等待方式:
一种是隐式等待,一种是显式等待,隐式等待是等待特定的时间,显式等待是指某一条件直到这个条件成立时继续执行。

显示等待:指定某个条件,然后设置最长等待时间。如果这个时间还没有找到元素,那么便会抛出异常了。如果不写参数,程序默认会0.5s调用一次来查看元素是否已经生成,如果本来元素就是存在的,那么会立即返回。

隐式等待:比较简单,就是简单地设置一个等待时间,单位为秒。如果不设置,默认等待时间为0。通过设定的时长等待页面元素加载完成,再执行下面的代码,如果超过设定时间还未加载完成,则继续执行下面的代码(注意:在设定时间内加载完成则立即执行下面的代码)。

下面是一些内置的等待条件,可以直接调用这些条件,而不用自己写某些等待条件了。 expected_conditions类提供的预期条件判断方法如下。

title_is 标题是某内容
title_contains 标题包含某内容
presence_of_element_located 元素加载出,传入定位元组,如(By.ID, 'p')
visibility_of_element_located 元素可见,传入定位元组
visibility_of 可见,传入元素对象
presence_of_all_elements_located 所有元素加载出
text_to_be_present_in_element 某个元素文本包含某文字
text_to_be_present_in_element_value 某个元素值包含某文字frame_to_be_available_and_switch_to_it frame 加载并切换
invisibility_of_element_located 元素不可见
element_to_be_clickable 元素可点击
staleness_of 判断一个元素是否仍在 DOM,可判断页面是否已经刷新
element_to_be_selected 元素可选择,传元素对象
element_located_to_be_selected 元素可选择,传入定位元组
element_selection_state_to_be 传入元素对象以及状态,相等返回 True,否则返回 False
element_located_selection_state_to_be 传入定位元组以及状态,相等返回 True,否则返回False
alert_is_present 是否出现 Alert 

显示等待
**4 Selenium实战案例**

隐式等待
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/154464.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java基本数据类型与引用类型的区别

晒个小暖 南方人的冬天,太阳总是很赏脸,花花草草长得很漂亮,厚棉被晒得很舒服,腊肠腊肉腊鸭油光发亮,就这样站在日光下一会吧,你也会变得亮亮堂堂,和和融融。不管是不是冬天,没有什…

3.ubuntu20.04环境的ros搭建

ros搭建比较简单,主要步骤如下: 1.配置ros软件源: sudo sh -c echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list 2.配置密钥 sudo apt-key adv --keyser…

小众市场:探索跨境电商中的利基领域

随着全球数字化和互联网的普及,跨境电子商务已经成为了一个蓬勃发展的产业。从亚马逊到阿里巴巴,大型电商平台已经占据了很大一部分市场份额。 然而,在这个竞争激烈的领域,寻找小众市场和利基领域可能是一种成功的策略。本文将探…

HR问:有没有免费的人才测评工具?

人才测评工具分为两种,一种是测评量表,一种是操作量表的工具,在线测评的方式没有普及之前,很多朋友都习惯把测评量表(测评试题)称为测评工具,其实我认为量表就是量表,而试试量表测评…

【图数据库实战】图数据库基本概念

1、图数据库的概念 维基百科图书库的概念: 在计算机科学中,图数据库(英语:graph database,GDB)是一个使用图结构进行语义查询的数据库,它使用节点、边和属性来表示和存储数据。该系统的关键概念…

Spring Boot 与 Gzip 压缩

响应压缩是 Web 应用一种常见的优化手段,通过压缩算法减小传输数据的体积,提高传输效率、节约带宽。客户端接收到数据后,使用相同的算法对数据进行解压从而获取到原始数据。 客户端和服务器需要通过 Header 来协商双方支持的压缩算法。 Acc…

win10 火绒 每次打开word、excel都会提示,你要如何打开这个文件

一、概述 最近电脑每次打开办公软件,比如word、excel等,都会提示让选择如何打开这个文件?即使是默认程序已经关联的启动文件,也是会提示,不管是设置“始终使用此应用打开.xIsx 文件”几次,还是一样的提示&…

python接口自动化测试之接口数据依赖

一般在做自动化测试时,经常会对一整套业务流程进行一组接口上的测试,这时候接口之间经常会有数据依赖,那又该如何继续呢? 那么有如下思路: 抽取之前接口的返回值存储到全局变量字典中。初始化接口请求时,…

深度了解LinkedBlockingQueue底层实现原理

文章目录 前言一、Queue接口的定义二、AbstractQueue实现Queue的基本操作1.AbstractQueue源码注释解析2.方法add、remove、element、clear、addAll的实现原理 三、BlockingQueue接口定义解析1.入列操作2.出列操作3.其他操作 四、LinkedBlockingQueue源码解析1.LinkedBlockingQu…

【SEO学习】其他技术

还有其他各种与搜索引擎优化有关的技巧。我们没有将它们归入任何特殊类别,因此将它们归入杂项类别。请逐一阅读这些技巧。 禁忌列表 不要在网页上保留隐藏文字。不要使用错误的关键字来制作垃圾图片。不要使用元标签。不要在网站上使用框架和 Flash。不要与黑名单…

Keithley2420吉时利2420数字源表

Keithley2420吉时利2420数字源表系列,专用于要求紧密结合源和测量的测试应用。全部数字源表型号都提供精密电压源和电 流源以及测量功能。每款数字源表既是高度稳定的直流 电源也是真仪器级的6位半万用表。此电源的特性包括 低噪声、精密和回读。此万用表的功能包括…

容斥 C. Strange Function改编题

补题: 题目详情 - 9.段坤爱取模%%% - SUSTOJ 本题或许是参考 Problem - C - Codeforces 根据题意,f(i)就是不能被整除的最小的一个质因子。 打表发现,当15个质因子相乘后,长度就大于18。 因此可以知道小于等于1e16内的正整数x…

4本期刊被踢!11月SCI/SSCI目录已更新

​2023年11月20日,科睿唯安更新了Web of Science核心期刊目录。 此次更新后SCIE期刊目录共包含9481本期刊,SSCI期刊目录共包含3551本期刊。此次SCIE & SSCI期刊目录更新,与上次更新(2023年10月)相比,共…

PixCake:让你的照片焕发新生的AI人像处理技术修图软件

大家好!今天我要向大家推荐一款令人惊艳的AI人像处理技术修图软件——PixCake像素蛋糕。无论你是摄影爱好者还是普通用户,PixCake都能帮助你将照片修饰得更加出色、生动。 PixCake拥有强大的AI人像处理技术,可以自动识别照片中的人物&#x…

建筑可视化中的 3D 纹理

在线工具推荐: 三维数字孪生场景工具 - GLTF/GLB在线编辑器 - Three.js AI自动纹理化开发 - YOLO 虚幻合成数据生成器 - 3D模型在线转换 - 3D模型预览图生成服务 1、什么是 3D 纹理? 纹理是将二维图像添加到三维模型的技术艺术。虽然对物体进行纹…

Linux安装Mysql详细教程(两种安装方法)

Linux之Mysql安装配置 第一种:Linux离线安装Mysql(提前手动下载好tar.gz包)第二种:通过yum安装配置Mysql(服务器有网络) 第一种:tar.gz包安装 1、 查看是否已经安装 Mysql rpm -qa | grep m…

计算机网络的标准化工作及相关组织

一、国际化组织 计算机网络的标准化工作由一些主要的组织来进行管理和推动。以下是几个主要的计算机网络标准化的国际组织及其相关的标准: 1. 国际标准化组织(ISO):国际标准化组织负责制定各种行业的标准,包括计算机…

SpringBoot 整合 Freemarker

通过 Freemarker 模版,我们可以将数据渲染成 HTML 网页、电子邮件、配置文件以及源代码等。 Freemarker 不是面向最终用户的,而是一个 Java 类库,我们可以将之作为一个普通的组件嵌入到我们的产品中。 Freemarker 模版后缀为 .ftl(FreeMarke…

Nginx部署前端项目

Nginx部署前端项目 1.在nginx官网http://nginx.org/en/download.html ,下载稳定版本: 2.解压后,点击根目录中的nginx.exe即可启动Nginx,或是在nginx安装目录中启动cmd并输入以下命令启动: nginx.exe 或 start nginx3…

Apahce虚拟主机配置演示

在企业的真实环境中,一台WEB服务器发布单个网站会非常浪费资源,所以一台WEB服务器一般都会发布多个网站,少则3-5个,多个10-20个网站。在一台服务器上发布多网站,也称之为部署多个虚拟主机。 WEB虚拟机主机配置方法主要…