作者:兴安国来源:AirPython1。Python自动化:Helium是什么?Helium是一个用于Web端自动化的开源框架。它的全称是:Selenium-Python-Helium。从名字就可以看出,Helium似乎与Selenium关系密切。的确,Helium封装了Selenium,屏蔽了Selenium的很多实现细节,提供了更简洁直观的API,更方便我们进行web端的自动化。官方表示,要实现同样的功能,Helium需要的代码比Selenium少30%-50%。目前,Helium仅支持Chrome和FireFox2。Helium的优缺点主要有以下6个优点:Helium自带WebDriver,无需下载配置浏览器驱动内嵌页面iframe页面元素直接操作,无需使用switch_to.frame()切换iframe表单管理更方便,可以直接使用窗口标题或部分标题的内容来切换表单隐式等待,对某个元素进行点击操作。如果没有出现Selenium,脚本将无法执行;而Helium默认最多等待10s,等待元素出现后立即执行点击操作。显式等待,Helium提供了更优雅的API来等待页面元素出现。API更简洁直观,代码更少。Helium的主要缺点体现在:由于封装,屏蔽了很多细节,不适合二次开发。目前只有Chrome和FireFox浏览器版本更新较慢。,Bugsleftandlessdocuments3.准备切换到对应的虚拟环境,通过pip命令安装依赖。安装依赖pip3installhelium接下来我们在IDE中使用helium.__all__打印出它包含的属性和方法。发现Helium包含的操作动作、控制对象、键盘操作关键字基本涵盖了大部分自动化操作场景4.SeleniumVSHelium是骡子还是马,拉出来~接下来我们登录126邮箱为例。Selenium和Helium比较1.传统Selenium实现首先我们需要下载并配置WebDriver,然后实例化WebDriver对象,打开邮箱登录的主页面fromseleniumimportwebdriverinstance更改Driverdriver=webdriver.Chrome()隐式等待10sdriver.implicitly_wait(10)打开主页面driver.get(home_url)通过观察网页元素,发现输入框区域包裹在iframe内嵌页面中,所以我们需要使用switch_to。frame()函数切换到对应的iframe来操作iframe里面的元素fromselenium.webdriver.common.byimportByfromselenium.webdriver.supportimportexpected_conditionsasECfromselenium.webdriver.support.uiimportWebDriverWait显示等待打开mainpagewait=WebDriverWait(driver,10,0.5)切换到对应的iframe,否则无法操作内部元素URS-iframe")]')))接下来使用SeleniumAPI(这里以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=Truetry:element_recy_email=wait.until(EC.element_to_be_clickable((By.XPATH,'//span[@class="oz0"andcontains(text(),"接收信件")]')))ifelement_recy_email:result=Trueelse:result=FalseexceptExceptionase:result=Falseprint("emailloginsuccessful"ifresultelse"emailloginfailed")2.Helium实现接下来,我们先通过Helium实现这个操作,我们只需要2行代码就可以打开主页fromheliumimport*打开主页driver=start_chrome(home_url)等待元素加载wait_until(Text("你的专业邮箱").exists)然后通过内置的TextField控件对象和预设的文本内容,使用write动作输入用户名和password不用切换iframe,直接输入write(username,TextField('邮箱账号或手机号'))write(password,TextField('Enterpassword'))值得一提的是,Helium不需要切换iframe,并且可以直接操作嵌入的页面元素,简直不要太方便!然后,模拟点击键盘回车完成登录操作模拟点击回车键登录press(ENTER)通过Helium内置的wait_until方法+控制对象,可以显式等待元素出现。默认最长时间为10秒。例如等待登录完成主页主页面加载完毕,收件箱可以点击,执行一次点击操作wait_until(Text('receive').exists)点击收件箱click(Text('receiving'))最后调用kill_browser()方法关闭浏览器,结束自动运行Exitsleep(10)关闭浏览器kill_browser()需要指出的是Helium使用start_chrome()返回的对象方法其实是WebDriverObjects可以和SeleniumAPI5一起使用。最后通过上面的对比,Helium似乎比Selenium使用起来更方便,但是不适合一些复杂的页面。所以在实际的自动化项目中,推荐Selenium和Helium一起使用。简单页面使用Helium,复杂页面切换到Selenium
