Python 自动化,Helium 凭什么取代 Selenium?

  1. Helium 是什么?
    Helium 是一款 Web 端自动化开源框架,全称是: Selenium-Python-Helium , 从名字上 就可以看出, Helium 似乎和 Selenium 息息相关

很多人学习python,不知道从何学起。

很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。

很多已经做案例的人,却不知道如何去学习更加高深的知识。

那么针对这三类人,我给大家提供一个好的学习平台,免费领取视频教程,电子书籍,以及课程的源代码!

QQ群:101677771

确实, Helium 针对 Sel e n i um 进行了 封装 , 它屏蔽了 Selenium 很多实现细节,提供了更加简洁直观的 API,更方便我们进行 Web 端的自动化

官方表示,要实现同样的功能,Helium 相比 Selenium 要少 30% - 50% 的代码

目前, Helium 仅支持 Chrome 和 FireFox

2.优缺点
Helium 主要包含下面 6 个优点:

Helium 自带 WebDriver,不需要下载、配置浏览器驱动

内嵌页面 iframe 页面元素直接操作,不需要使用 switch_to.frame() 切换 iframe

窗体管理更方便,可以直接使用窗口标题或部分标题内容来切换窗体

隐式等待 ,针对某个元素执行点击操作,Selenium 如果元素没有出现,脚本会执行失败; 而 Helium 默认最多等待 10s,等待元素出现后立马执行点击操作

显式等待,Helium 提供更加优雅的 API 来等待页面元素出现

API 更简洁直观,代码量少

Helium 主要缺点,体现在:

由于封装,屏蔽了很多细节,所以它 不合适二次开发

目前仅支持 Chrome 和 FireFox 浏览器

版本更新慢、遗留 Bug 及文档少

3.准备一下
切换到对应的虚拟环境下,通过 pip 命令安装依赖即可

安装依赖

pip3 install helium
接着,我们在 IDE 中,使用 hel ium.all 打印出它 包含的 属性及方法

我们发现, Helium 包含的操作动作、控件对象、键盘操作关键字基本覆盖了大部分的自动化操作场景

4.Selenium VS Helium
是骡子是马,拉出来溜溜 ~

接下来,我们以登录 126 邮箱为例,来比较 Selenium 和 Helium

1、传统 Selenium 实现

首先,我们需要下载并配置 WebDriver,然后实例化 WebDriver 对象,打开邮箱登录的主页面

from selenium import webdriver

实例化Driver

driver = webdriver.Chrome()

隐式等待10s

driver.implicitly_wait(10)

打开主页面

driver.get(home_url)
通过观察网页元素, 发现输入框区域被包裹在 iframe 内嵌页面中

所以,我们需要使用 switch_to.frame() 函数切换到对应的 iframe,才能操作 iframe 内部的元素

from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait

显示等待打开主页面

wait = WebDriverWait(driver, 10, 0.5)

切换到对应的iframe,否则无法操作内部元素

wait.until(
EC.frame_to_be_available_and_switch_to_it(driver.find_element_by_xpath('//iframe[contains(@id,"x-URS-iframe")]')))
接着,使用 Selenium API( 这里以 Xpath 为例 )查找用户名和密码输入框、登录按钮;输入用户名和密码,模拟登录操作

用户名输入框

element_input = wait.until(EC.visibility_of(driver.find_element_by_xpath('//input[@name="email"]')))
element_input.clear()
element_input.send_keys(username)

密码输入框

element_password = wait.until(EC.visibility_of(driver.find_element_by_xpath('//input[@name="password"]')))
element_password.clear()
element_password.send_keys(password)

登录按钮

wait.until(EC.element_to_be_clickable((By.XPATH, '//a[@id="dologin"]'))).click()
最后,通过某个页面元素是否出现来判断是否登录成功

找一个登录成功的页面元素

通过元素属性+元素值来唯一定位元素

result = True
try:
element_recy_email = wait.until(EC.element_to_be_clickable((By.XPATH, '//span[@class="oz0" and contains(text(),"收 信")]')))
if element_recy_email:
result = True
else:
result = False
except Exception as e:
result = False

print("邮箱登陆成功" if result else "邮箱登录失败")
2、Heliu m 实现

接下来,我们通过 Helium 的方式来实现这一操作

首先,我们只需要 2 行代码即可以打开主页

from helium import *

打开主页

driver = start_chrome(home_url)

等待元素加载完成

wait_until(Text("你的专业电子邮局").exists)
然后,通过内置 TextField 控件对象及预设文本内容,使用 write 动作输入用户名和密码

不需要切换iframe,直接输入

write(username,TextField('邮箱帐号或手机号码'))
write(password,TextField('输入密码'))
值得一提的是, Helium 不需要切换 iframe,可以直接操作内嵌页面元素,简直不要太方便!

接着,模拟点击键盘上的 Enter,完成登录操作

模拟点击Enter键登录

press(ENTER)
通过 Helium 内置的 wait_until 方法 + 控件对象,可以显式等待元素出现,默认最长时间为 10s

比如,这里等待登录完成的主页面加载完成,收件箱可以点击,执行一次点击操作

wait_until(Text('收 信').exists)

点击收件箱

click(Text('收 信'))
最 后,调用 kill_browser() 方法关闭浏览器,结束自动化操作

退出

sleep(10)

关闭浏览器

kill_browser()
需要指出的是, Helium 使用 start_chrome() 方法返回的对象实际上就是 WebDriver 对象,可以结合 Selenium API 一起使用

5.最后
通过上面的对比发现,Helium 相比 Selenium 使用似乎更方便,但是它不适用于一些复杂的页面

因此, 在实际自动化项目中,建议搭配 Selenium 和 Helium 使用,简单的页面使用 Helium,复杂的页面切换到 Selenium

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 229,460评论 6 538
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 99,067评论 3 423
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 177,467评论 0 382
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 63,468评论 1 316
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 72,184评论 6 410
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 55,582评论 1 325
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 43,616评论 3 444
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 42,794评论 0 289
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 49,343评论 1 335
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 41,096评论 3 356
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 43,291评论 1 371
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 38,863评论 5 362
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 44,513评论 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 34,941评论 0 28
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 36,190评论 1 291
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 52,026评论 3 396
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 48,253评论 2 375