十分钟认识一下 Selenium 的自动化工具

Selenium 是什么?
Selenium 是一个 Web 自动化工具,能够模拟用户与浏览器交互,实现浏览器操作自动化。它主要的应用场景是 Web 应用的自动化测试领域,实现了从人工在浏览器中 “点点点”测试向自动化测试的进阶,可以说是测试人员必会的自动化工具。当然,Selenium 的作用远不止于此。

关于 WebDriver
WebDriver 是 Selenium 的核心,那么 WebDriver 是干什么的呢?

Selenium 为多种程序语言提供了相应的 Selenium 库,例如 Python、Java、JS等。我们通过程序代码(例如 Python)告诉浏览器要做什么,然后浏览器收到指令后,进行相应自动化操作,并返回给程序所需的响应。这个过程中,浏览器是如何读懂程序的请求的,这就要用到 WebDriver 了。可以说,WebDriver 就像是一位负责程序与浏览器之间交互的翻译员。

即:Selenium库程序代码 <——> WebDriver <——> 浏览器

WebDriver 由浏览器厂商提供,例如 Chrome、火狐浏览器都有各自的 WebDriver 。

安装
通过前面介绍的 Selenium 自动化流程,我们知道了整个过程中所需的环境组件:Selenium 库、WebDriver、浏览器,当然还有一个编程语言(这里以 Python 为例介绍)。Python 与浏览器的安装这里就不介绍了,浏览器建议使用 Chrome 浏览器。

安装 Selenium 库
使用 pip 命令安装即可。

pip install selenium
安装 WebDriver
这里以 chrome 浏览器为例介绍。

在下面地址页面下载与你 chrome 浏览器版本相同或相近的 WebDriver 版本。

https://sites.google.com/a/chromium.org/chromedriver/downloads

例如,我的chrome浏览器版本是 94.0.4606.81,所以只需下载目前最新的 ChromeDriver 94.0.4606.41 版本即可。根据自己实际的操作系统,下载对应的包并解压,得到 WebDriver 文件。

将 WebDriver 文件放在某目录下,然后将该目录路径添加到系统环境变量中。这样做的好处是免去了在程序中指明 WebDrive 的存放路径。

例如 Linux 下:

export PATH="$PATH:/path/to/chromedriver"
WebDriver 常用对象的属性/方法
实例化浏览器的 WebDriver 对象

from selenium.webdriver import Chrome

cd = Chrome()

浏览器导航
cd.title 获取当前窗口页面的标题

cd.current_url 当前窗口页面的URL地址

cd.get() 打开目标网址链接

cd.back() 按浏览器的后退按钮

cd.forward() 按浏览器的前进按钮

cd.refresh() 刷新当前页面

浏览器窗口
浏览器每个标签窗口都有一个窗口句柄作为唯一的标识符。

cd.window_handles 当前浏览器所有窗口句柄组成的列表(用于切换窗口)

cd.current_window_handle 当前窗口的句柄

cd.switch_to.window(某窗口句柄) 通过窗口句柄切换窗口

cd.set_window_size(1024, 768) 设置窗口大小

cd.maximize_window() 最大化窗口

cd.close() 关闭窗口

cd.quit() 关闭浏览器

html内嵌iframe
cd.switch_to.frame() 切换到页面中的目标 iframe 页面。

cd.switch_to.default_content() 从iframe 页面切换回主html页面。

等待
cd.implicitly_wait(10) 页面最长等待时间(10s)

截屏
cd.save_screenshot(’./image.png’) 截屏并设置保存路径

执行脚本
cd.execute_script() 在当前窗口页面执行js脚本

定位元素
cd.find_element(s)by***() 定位元素,返回目标元素对象。例如:

cd.find_element_by_id(’) 根据元素 id 属性值定位元素

cd.find_elements_by_class_name() 根据元素 class 属性值定位元素,返回复合条件的元素列表

cd.find_element_by_class_name() 根据元素 class 属性值定位元素,返回复合条件的第一个元素

cd.find_elements_by_tag_name() 根据 html 标签定位元素

如果你熟悉 CSS 的选择器,可以直接使用 CSS 选择器来定位元素:

cd.find_element_by_css_selector()

cd.find_elements_by_css_selector()

CSS 选择器相关知识这里不展开细述,HTML 和 CSS 乃至 JS 都是应用 Selenium 的前提必备技能。

弹窗按钮
界面中可能会出现让用户确认的交互操作:

cd.switch_to.alert.accept() 点击弹窗中的确认(OK)按钮

cd.switch_to.alert.dismiss() 点击弹窗中的取消按钮

cd…switch_to.alert.text 获取弹窗里的内容

示例演练
比如我们要让浏览器自动打开百度,Python 代码如下:

from selenium.webdriver import Chrome
cd = Chrome()
cd.set_window_size(1500, 1000)
cd.implicitly_wait(10)
cd.get(‘https://www.baidu.com’)
上面这个例子太简单了?那我们接下来再试试一个小示例:

就拿本文为例,我现在想把这篇文章自动发布到其他平台网站,这样我就不用手动发布了。比如,我现在要把本文发布到慕课网上去,整体的思路是:

先爬取本页面(这里我使用 requests);

解析本页面的文章内容(使用 BeautifulSoup);

将内容转换为 markdown 模式;

自动登录目标网站进行发布;

大体的 Python 代码如下:

#!/usr/bin/python3
import requests
import bs4
import time

使用requests 爬取本页面

url = ‘https://www.xuecaijie.com/automated-testing/231.html’
response = requests.get(url)

使用 BeautifulSoup 解析出文章的标题和内容

soup = bs4.BeautifulSoup(response.text, “html.parser”)
arttittle = soup.find(“h1”).text
element = soup.find(class_ = “article-content”).prettify()
#使用 html2text 模块将 bs 过来的 HTML 文档转化为 Markdown 文档。
import html2text as ht
text_maker = ht.HTML2Text()
text = text_maker.handle(element)

接下来就是 selenium 的 showtime 了~

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

使用无头模式,无需打开浏览器

options = Options()
options.add_argument(’–headless’)
options.add_argument(’–disable-gpu’)
options.add_argument("–window-size=1920,1080")
options.add_argument("–no-first-run")
options.add_argument("–no-default-browser-check")
options.add_argument(‘log-level=3’)
cd = webdriver.Chrome(options=options)
cd.implicitly_wait(10)
#通过selenium登录慕课网发布文章
cd.get(‘https://www.imooc.com/article/publish#’)
phone = cd.find_element_by_css_selector(‘input[name=“email”]’)
phone.send_keys(’[你的帐号]’)
phone = cd.find_element_by_css_selector(‘input[name=“password”]’)
phone.send_keys(’[你的密码]’)
login = cd.find_element_by_css_selector(‘input[value=“登录”]’)
login.click()
time.sleep(3)

选择 markdown 编辑器

mkbutton = cd.find_element_by_css_selector(‘span[data-type=“0”]’)
mkbutton.click()
title = cd.find_element_by_id(‘article_title’)
title.send_keys(arttittle)
content = cd.find_element_by_css_selector(’.editor pre.editor__inner’)
content.send_keys(text)
time.sleep(60)
结尾处我就不真发布了,大家参考了解一下整个过程即可。

来源:https://www.rrdynb.com/index.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值