Python Web 自动化测试工具 — Selenium

庆云2年前技术文章1199

Selenium 是一个 Web 自动化测试工具,Selenium 通过非常简洁方便的 API,使用 Selenium WebDrivers(Selenium web 驱动器)像使用 Firefox, IE, Chrome, Remote 等一样方便。

Selenium 可以直接运行在浏览器上,它支持所有主流的浏览器(包括 PhantomJS 这些无界面的浏览器),可以接收指令,让浏览器自动加载页面,获取需要的数据,甚至页面截屏。


1、安装 selenium

$ pip install selenium


2、下载浏览器驱动

Firefox 浏览器驱动:WebDriver for Firefox

Chrome 浏览器驱动:ChromeDriver

IE 浏览器驱动:IEDriver

Edge 浏览器驱动:Microsoft Edge WebDriver


语法:

from selenium import webdriver

# Edge浏览器
driver = webdriver.Edge("executable_path")

# Firefox浏览器
driver = webdriver.Firefox()

# Chrome浏览器
driver = webdriver.Chrome()

# Internet Explorer浏览器
driver = webdriver.Ie()

# Opera浏览器
driver = webdriver.Opera()

# PhantomJS
driver = webdriver.PhantomJS()

# 打开网页
driver.get(url)

注意:executable_path 需要指定浏览器驱动的可执行文件路径,如果使用默认值,则假定浏览器驱动可执行文件在 $PATH 中。


3、使用 selenium

使用流程:

  1. 导包

  1. 创建浏览器对象

  1. 发送请求、获取数据

  1. 处理数据、保存数据

  1. 关闭页面/退出浏览器

3.1 有界面模式

# 导包
from selenium import webdriver

# 创建浏览器对象
driver = webdriver.Edge()

# 发送请求
driver.get("https://www.baidu.com/")

# 获取数据
data = driver.page_source
print(type(data), data)    # str <html>...</html>

3.2 无界面模式

# 导包
from selenium import webdriver
from selenium.webdriver.edge.options import Options

# 实例化options对象
options = Options()
options.add_argument("--headless")

# 创建浏览器对象
driver = webdriver.Edge(options=options)

# 发送请求
driver.get("https://www.baidu.com/")

# 获取数据
data = driver.page_source
print(type(data), data)    # str <html>...</html>

3.3 元素操作

定位元素语法:

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Edge()

text_box = driver.find_element(by=By.NAME, value="my-text")
submit_button = driver.find_element(by=By.CSS_SELECTOR, value="button")


# By策略
By.ID
By.NAME
By.XPATH
By.CSS_SELECTOR
By.CLASS_NAME
By.LINK_TEXT
By.PARTIAL_LINK_TEXT
By.TAG_NAME


操作元素语法:

  • 点击 (适用于任何元素)

  • 发送键位 (仅适用于文本字段和内容可编辑元素)

  • 清除 (仅适用于文本字段和内容可编辑元素)

  • 提交 (仅适用于表单元素)

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Edge()

text_box = driver.find_element(by=By.NAME, value="my-text")
submit_button = driver.find_element(by=By.CSS_SELECTOR, value="button")

# 点击
submit_button.click()


实例: 实现谷歌搜索

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys

# 创建浏览器对象
driver = webdriver.Edge()

# 发送请求
driver.get("http://www.google.com")

# 定位搜索框、输入文本并回车
driver.find_element(By.NAME, "q").send_keys("python" + Keys.ENTER)

3.4 浏览器操作

# 前进
driver.forward()

# 后退
driver.back()

# 刷新
driver.refresh()

# 关闭
driver.close()

# 退出
driver.quit()

# 控制浏览器窗口大小
driver.set_window_size(480, 800)


相关文章

开源大数据集群部署(七)Freeipa卸载

开源大数据集群部署(七)Freeipa卸载

1、命令卸载如果命令还卸载不赶紧,就在FreeIPA界面删除ipa-server-install -U --uninstall #服务端卸ipa-client-install -U --uninsta...

sqlserevr索引、自增列查询SQL

sqlserevr索引、自增列查询SQL

一、索引查询1.可视化方式查询1) 进入实例数据库内,选择想要查看的数据库及表信息。2) 展开表,即可查看其索引情况(一般情况下,PK为主键,IX为索引)。 3) 或者右击表,编辑表结构,可以查看到索...

kubernetes调度和调度器

一、Kubernetes调度Scheduler 是 kubernetes 的调度器,主要的任务是把定义的 pod 分配到集群的节点上。听起来非常简单,但有很多要考虑的问题:公平:如何保证每个节点都能被...

lvm介绍和常用命令

lvm介绍和常用命令

在分区的时候,每个分区应该分多大是令人头疼的,而且随着长时间的运行,分区不管你分多大,都会被数据给占满。当遇到某个分区不够用时管理员可能甚至要备份整个系统、清除硬盘、重新对硬盘分区,然后恢复数据到新分...

Prometheus+Consul服务自动发现监控

Prometheus+Consul服务自动发现监控

为什么使用consulprometheus作为新一代的监控利器,有很多优点,部署起来也十分方便。部署prometheus后自然会需要使用prometheus去监控物理机或者虚拟机的资源,这里就需要使用...

两款方案详解,企业线下数据库迁移至云上ScyllaDB(2)

方案二通过在集群中添加新数据中心的方式,进行数据迁移。然后下线集群老的数据中心。1. 集群添加新数据中心1.1. 先决条件收集现有集群信息:cat /etc/scylla...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。