当前位置: 首页 > 后端技术 > Python

Web自动化,为什么Helium取代了Selenium?

时间:2023-03-26 12:49:05 Python

1.什么是氦气?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浏览器版本更新较慢。,遗留Bug,文档少3.准备切换到对应的虚拟环境,通过pip命令安装依赖#Installdependenciespip3installhelium接下来我们在IDE中使用helium.__all__打印出它包含的属性和方法我们发现Helium包含的操作动作、控制对象、键盘操作关键字基本涵盖了大部分的自动化操作场景4.SeleniumVSHelium是骡子还是马,拉出来~接下来我们登录126邮箱举个例子,比较Selenium和Helium1.传统Selenium实现首先,我们需要下载并配置WebDriver,然后实例化WebDriver对象,打开邮件登录的主页面fromseleniumimportwebdriver#instantiateDriverdriver=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#显示等待打开主页面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")]')))接下来使用SeleniumAPI(这里以Xpath为例)找到用户名密码输入框,登录按钮;输入用户名和密码,模拟登录操作()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(密码)#登录按钮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(),"receipt")]')))ifelement_recy_email:result=Trueelse:result=FalseexceptExceptionase:result=Falseprint("Emailloginsucceeded"ifresultelse"Emailloginfailed")2.Helium实现接下来,我们使用Helium的这个操作的实现方式首先我们只需要2行代码就可以打开主页fromheliumimport*#打开主页driver=start_chrome(home_url)#等待元素加载wait_until(Text("你的专业e-mail").exists)然后通过内置的TextField控件对象和预设的文本内容,使用write动作输入用户名和密码#No需要切换iframe,直接输入write(username,TextField('邮箱账号或手机号'))write(password,TextField('输入密码'))值得一提的是,Helium不需要切换iframe,并且可以直接操作嵌入的页面元素,简直不要太方便!然后,模拟点击键盘回车完成登录操作#模拟点击回车键登录press(ENTER)通过Helium内置的wait_until方法+控制对象,可以显式等待元素出现。默认最长时间为10秒。比如这里等待登录完成的主页面加载完成,可以点击收件箱,执行一次点击操作wait_until(Text('Receive').exists)#点击收件箱click(Text('Receive'))最后,调用kill_browser()方法关闭浏览器结束自动化运行#exitsleep(10)#关闭浏览器kill_browser()需要指出的是Helium使用start_chrome()方法返回的对象其实是一个WebDriverobject,可以和SeleniumAPI一起使用5.最后,通过上面的对比,Helium似乎比Selenium使用起来更方便,但是不适合一些复杂的页面。所以在实际的自动化项目中,推荐Selenium和Helium一起使用。简单页面使用Helium。复杂页面切换到Selenium如果觉得文章还不错,请点赞、分享、留言,因为这将是我继续输出更多优质文章的最强大动力!