一、简介
Helium 是一款 Web 端自动化开源框架,Helium 针对 Selenium 进行了封装,它屏蔽了 Selenium 很多实现细节,提供了更加简洁直观的 API,更方便我们进行 Web 端的自动化
- Helium 主要包含下面 6 个优点:
- Helium 自带 WebDriver,不需要下载、配置浏览器驱动
- 内嵌页面 iframe 页面元素直接操作,不需要使用 switch_to.frame() 切换 iframe
- 窗体管理更方便,可以直接使用窗口标题或部分标题内容来切换窗体
- 隐式等待,针对某个元素执行点击操作,Selenium 如果元素没有出现,脚本会执行失败;而 Helium 默认最多等待 10s,等待元素出现后立马执行点击操作
- 显式等待,Helium 提供更加优雅的 API 来等待页面元素出现
- API 更简洁直观,代码量少
- Helium 主要缺点,
- 由于封装,屏蔽了很多细节,所以它不合适二次开发
- 目前仅支持 Chrome 和 FireFox 浏览器
- 版本更新慢、遗留 Bug 及文档少
- 不适合复杂的页面,建议Helium和Selenium配合使用
二、安装
pip install helium
三、基本使用
- 谷歌浏览器
import helium
import time
helium.start_chrome()
helium.go_to("baidu.com")
time.sleep(3)
helium.kill_browser()
- 浏览器配置
import helium
from selenium.webdriver import ChromeOptions
import time
import os
chrome_options = ChromeOptions()
chrome_options.add_argument('blink-settings=imagesEnabled=false') # 不加载图片, 提升速度
chrome_options.add_argument('--disable-blink-features=AutomationControlled') #去除浏览器navigator.webdriver
driver_path = os.path.join(os.path.dirname(os.path.dirname(os.getcwd())), 'chromedriver.exe')
helium.set_driver(driver_path)
helium.start_chrome(options=chrome_options,maximize=True)
helium.go_to("baidu.com")
time.sleep(3)
helium.kill_browser()
- 搭配Selenium使用
import helium
from selenium import webdriver
import os
import time
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('blink-settings=imagesEnabled=false') # 不加载图片, 提升速度
chrome_options.add_argument('--disable-blink-features=AutomationControlled') #去除浏览器navigator.webdriver
chrome_options.add_experimental_option('useAutomationExtension', False) #去掉提示以开发者模式调用
chrome_options.add_experimental_option('excludeSwitches', ['enable-automation']) #以开发者模式启动调试chrome,可以去掉提示受到自动软件控制
chrome_options.add_argument('--start-maximized') #最大化运行(全屏窗口)
driver_path = os.path.join(os.path.dirname(os.path.dirname(os.getcwd())), 'chromedriver.exe')
browser = webdriver.Chrome(executable_path=driver_path,options=chrome_options)
helium.set_driver(browser)
helium.go_to("baidu.com")
time.sleep(3)
helium.kill_browser()
四、方法及属性
- helium.start_chrome(url, headless, maximize, options, capabilities):打开火狐谷歌
- url:要打开的URL地址。
- headless:指定是否以无头模式启动Chrome浏览器。默认为False,即以有界面的方式启动。如果将其设置为True,则以无界面的方式启动,即不显示浏览器窗口。
- maximize:指定是否最大化浏览器窗口。默认为False。如果将其设置为True,则在启动时最大化浏览器窗口。
- options:一个chrome_options对象,用于配置Chrome浏览器的启动选项。可以使用Options()类创建chrome_options对象,并使用其方法来配置浏览器的各种选项,例如设置代理、启用/禁用JavaScript等。
- capabilities:一个字典,用于指定Chrome浏览器的所需的额外配置。可以使用该参数来设置浏览器的代理、用户代理字符串等。
- helium.start_firefox(url, headless, options, profile):打开火狐
- url:要打开的URL地址。默认为None,即不打开任何URL。
- headless:指定是否以无头模式启动Firefox浏览器。默认为False,即以有界面的方式启动。如果将其设置为True,则以无界面的方式启动,即不显示浏览器窗口。
- options:一个firefox_options对象,用于配置Firefox浏览器的启动选项。可以使用Options()类创建firefox_options对象,并使用其方法来配置浏览器的各种选项,例如设置代理、启用/禁用JavaScript等。
- profile:一个firefox_profile对象,用于指定要使
- helium.set_driver(driver):设置浏览器驱动程序
- helium.get_driver():获取浏览器驱动程序
- driver.get(url): 打开指定的 URL。
- driver.find_element(by, value): 根据给定的定位方式(如 ID、Class Name、XPath 等)和值定位单个元素。
- driver.find_elements(by, value): 根据给定的定位方式和值定位一组元素。
- driver.click(): 单击当前定位的元素。
- driver.send_keys(*value): 向当前定位的元素发送键盘输入。
- driver.clear(): 清除当前定位的元素的文本内容。
- driver.submit(): 提交当前定位的表单元素。
- driver.get_attribute(name): 获取当前定位的元素的指定属性值。
- driver.text: 获取当前定位的元素的文本内容。
- driver.is_displayed(): 检查当前定位的元素是否可见。
- driver.is_enabled(): 检查当前定位的元素是否可用。
- driver.is_selected(): 检查当前定位的元素是否被选中(适用于复选框和单选按钮)。
- driver.execute_script(script, *args): 在当前页面执行 JavaScript 脚本。
- driver.switch_to.frame(frame_reference): 切换到指定的 iframe 或 frame。
- driver.switch_to.default_content(): 切换回默认的上下文(退出 iframe 或 frame)。
- driver.back(): 后退到上一个页面。
- driver.forward(): 前进到下一个页面。
- driver.refresh(): 刷新当前页面。
- helium.go_to(url):导航到指定的网页
- helium.refresh():刷新当前页面
- helium.Window():浏览器对象窗口
window = helium.Window() print(window.handle) #所有窗口句柄 print(window.exists()) #浏览器窗口是否存在 print(window.title) #浏览器title
- helium.switch_to(window):窗口切换
window = helium.Window() helium.switch_to(helium.find_all(window)[1])
- helium.S(selector, belowto_right_of, above,to_left_of):用于创建一个选择器对象,选择器对象可以用于在网页上查找和操作元素
- selector:用于指定要选择的元素的CSS选择器或其他选择方式,支持xpath、css
- belowto_right_of:用于指定选择器对象位于另一个选择器对象的右下方。它接受一个选择器对象作为参数。
- above:用于指定选择器对象位于另一个选择器对象的上方。它接受一个选择器对象作为参数。
- to_left_of:用于指定选择器对象位于另一个选择器对象的左侧。它接受一个选择器对象作为参数。
input = helium.S('input#verifyCode') #css input = helium.S('//input[@id="verifyCode"]') #xpath print(input.exists()) #元素是否存在 print(input.top_left) #元素x、y坐标 print(input.width) #元素宽 print(input.height) #元素高 print(input.web_element) #返回一个web对象,selenium.webdriver.remote.webelement.WebElement print(button.x) #元素x坐标 print(button.y) #元素y坐标
- helium.write(text,into):在输入字段中输入文本
- text:要输入的文本内容,可以是字符串类型。
- into:要输入文本的输入字段的标识符,可以是placeholder、helium.Element对象。
helium.write(text='test',into='请输入用户名') #根据输入框的placeholder定位元素并输入 helium.write(text='test21',into=helium.S('//input[@id="verifyCode"]'))
- helium.wait_until(condition_fn, timeout_secs, interval_secs):等到给定的条件函数结果为真时
- condition_fn:一个函数,用于定义等待的条件。该函数应返回一个布尔值,表示条件是否满足,如选择器对象中的 exists()
- timeout_secs:等待的超时时间,以秒为单位。如果在超时时间内条件仍未满足,则等待操作将被中止。
- interval_secs:轮询检查条件的时间间隔,以秒为单位。在每次检查之间会等待指定的时间间隔。
- helium.Config.implicit_wait_secs = 5:隐式等待
- helium.Button(text, below, to_right_of, above,to_left_of):用于表示网页上的按钮元素。通过创建helium.Button对象,可以在网页中查找和操作元素
- text:按钮上显示的文本。如果未指定文本,则可以使用其他定位参数来定位按钮。
- below:要定位按钮的元素的标识符或helium.Element对象。按钮将位于指定元素的下方。
- to_right_of:要定位按钮的元素的标识符或helium.Element对象。按钮将位于指定元素的右侧。
- above:要定位按钮的元素的标识符或helium.Element对象。按钮将位于指定元素的上方。
- to_left_of:要定位按钮的元素的标识符或helium.Element对象。按钮将位于指定元素的左侧。
button = helium.Button('百度一下') print(button.exists()) #button是否存在 print(button.width) #button宽 print(button.height) #button高 print(button.web_element) #返回一个web对象,selenium.webdriver.remote.webelement.WebElement print(button.top_left) #元素x、y坐标 print(button.is_enabled()) #是否启用 print(button.x) #元素x坐标 print(button.y) #元素y坐标
- helium.Text(text, below, to_right_of, above,to_left_of):用于表示网页上的文本元素。通过创建helium.Text对象,可以在网页中查找和操作元素
- text:指定的文本。如果未指定文本,则可以使用其他定位参数来定位按钮。
- below:要定位按钮的元素的标识符或helium.Element对象。按钮将位于指定元素的下方。
- to_right_of:要定位按钮的元素的标识符或helium.Element对象。按钮将位于指定元素的右侧。
- above:要定位按钮的元素的标识符或helium.Element对象。按钮将位于指定元素的上方。
- to_left_of:要定位按钮的元素的标识符或helium.Element对象。按钮将位于指定元素的左侧。
text = helium.Text('百度一下') print(text.exists()) print(text.top_left) print(text.width) print(text.height) print(text.web_element) print(text.x) print(text.y)
- helium.TextField(label, below, to_right_of, abovee,to_left_of):用于表示网页上的textarea元素。通过创建helium.TextField对象,可以在网页中查找和操作元素
- label:textarea的label。如果未指定label,则可以使用其他定位参数来定位按钮。
- below:要定位按钮的元素的标识符或helium.Element对象。按钮将位于指定元素的下方。
- to_right_of:要定位按钮的元素的标识符或helium.Element对象。按钮将位于指定元素的右侧。
- above:要定位按钮的元素的标识符或helium.Element对象。按钮将位于指定元素的上方。
- to_left_of:要定位按钮的元素的标识符或helium.Element对象。按钮将位于指定元素的左侧。
text_field = helium.TextField() print(text_field.exists()) print(text_field.web_element) print(text_field.width) print(text_field.height) print(text_field.top_left) print(text_field.x) print(text_field.y) print(text_field.is_enabled()) #是否开启 print(text_field.is_editable()) #是否编辑
- helium.find_all(predicate):用于在当前网页中查找所有满足给定条件的元素,predicate是helium元素对象,如:S()、Button()、Text等
- helium.Link(text, below, to_right_of, above,to_left_of):用于表示网页上的textarea元素。通过创建helium.TextField对象,可以在网页中查找和操作元素
- text:指定的文本。如果未指定文本,则可以使用其他定位参数来定位按钮。
- below:要定位按钮的元素的标识符或helium.Element对象。按钮将位于指定元素的下方。
- to_right_of:要定位按钮的元素的标识符或helium.Element对象。按钮将位于指定元素的右侧。
- above:要定位按钮的元素的标识符或helium.Element对象。按钮将位于指定元素的上方。
- to_left_of:要定位按钮的元素的标识符或helium.Element对象。按钮将位于指定元素的左侧。
link = helium.Link('新闻') print(link.exists()) print(link.web_element) print(link.top_left) print(link.width) print(link.height) print(link.href) print(link.x) print(link.y)
- helium.Point(x,y):表示和操作页面上的坐标点
- helium.ComboBox(label, below, to_right_of, above,to_left_of):用于表示网页上的下拉框。可以在网页中查找和操作元素
- label:textarea的label。如果未指定label,则可以使用其他定位参数来定位按钮。
- below:要定位按钮的元素的标识符或helium.Element对象。按钮将位于指定元素的下方。
- to_right_of:要定位按钮的元素的标识符或helium.Element对象。按钮将位于指定元素的右侧。
- above:要定位按钮的元素的标识符或helium.Element对象。按钮将位于指定元素的上方。
- to_left_of:要定位按钮的元素的标识符或helium.Element对象。按钮将位于指定元素的左侧。
combo_box = helium.ComboBox('下拉框') print(combo_box.exists()) print(combo_box.web_element) print(combo_box.options) print(combo_box.width) print(combo_box.height) print(combo_box.top_left) print(combo_box.y) print(combo_box.x) print(combo_box.is_editable())
- helium.CheckBox(label, below, to_right_of, above,to_left_of):用于表示网页上的复选框。可以在网页中查找和操作元素
- label:textarea的label。如果未指定label,则可以使用其他定位参数来定位按钮。
- below:要定位按钮的元素的标识符或helium.Element对象。按钮将位于指定元素的下方。
- to_right_of:要定位按钮的元素的标识符或helium.Element对象。按钮将位于指定元素的右侧。
- above:要定位按钮的元素的标识符或helium.Element对象。按钮将位于指定元素的上方。
- to_left_of:要定位按钮的元素的标识符或helium.Element对象。按钮将位于指定元素的左侧。
check_box = helium.CheckBox('下拉框') print(check_box.exists()) print(check_box.web_element) print(check_box.is_enabled()) print(check_box.width) print(check_box.height) print(check_box.top_left) print(check_box.y) print(check_box.x)
- helium.Image(alt, below, to_right_of, above,to_left_of):用于表示网页上的图像。可以在网页中查找和操作元素
- alt:图像的替代文本。在无法显示图像时,替代文本将作为图像的描述显示。默认为None,即没有替代文本。
- below:要定位按钮的元素的标识符或helium.Element对象。按钮将位于指定元素的下方。
- to_right_of:要定位按钮的元素的标识符或helium.Element对象。按钮将位于指定元素的右侧。
- above:要定位按钮的元素的标识符或helium.Element对象。按钮将位于指定元素的上方。
- to_left_of:要定位按钮的元素的标识符或helium.Element对象。按钮将位于指定元素的左侧。
image = helium.Image('下拉框') print(image.exists()) print(image.web_element) print(image.width) print(image.height) print(image.top_left) print(image.y) print(image.x)
- helium.click(element):用于模拟点击指定的元素
- helium.doubleclick(element):用于模拟双击指定的元素
- helium.select(combo_box, value):用于选择下拉框中的选项
- helium.rightclick(element):用于模拟鼠标右键点击
- helium.hover(element):用于模拟鼠标悬浮
- helium.scroll_up(num_pixels):用于模拟向上滚动
- helium.scroll_down(num_pixels):用于模拟向下滚动
- helium.scroll_left(num_pixels):用于模拟向左滚动
- helium.scroll_right(num_pixels):用于模拟向右滚动
- helium.drag(element,to):用于模拟拖拽操作
- element:要拖拽的元素
- to:要拖拽到的目标位置,可以是元素
- helium.drag_file(file_path, to):用于拖拽文件
- file_path:文件路径
- to:要拖拽到的目标位置,可以是元素
- helium.attach_file(file_path, to):用于模拟上传文件
- file_path:文件路径
- to:要拖拽到的目标位置,可以是元素
- helium.Alert():用于处理网页弹窗
alert = helium.Alert() alert.exists() alert.accept() alert.dismiss()
- helium.press(key):用于模拟键盘按键操作
from selenium.webdriver.common.keys import Keys ''' NULL = Keys.NULL CANCEL = Keys.CANCEL HELP = Keys.HELP BACK_SPACE = Keys.BACK_SPACE TAB = Keys.TAB CLEAR = Keys.CLEAR RETURN = Keys.RETURN ENTER = Keys.ENTER SHIFT = Keys.SHIFT LEFT_SHIFT = Keys.LEFT_SHIFT CONTROL = Keys.CONTROL LEFT_CONTROL = Keys.LEFT_CONTROL ALT = Keys.ALT LEFT_ALT = Keys.LEFT_ALT PAUSE = Keys.PAUSE ESCAPE = Keys.ESCAPE SPACE = Keys.SPACE PAGE_UP = Keys.PAGE_UP PAGE_DOWN = Keys.PAGE_DOWN END = Keys.END HOME = Keys.HOME LEFT = Keys.LEFT ARROW_LEFT = Keys.ARROW_LEFT UP = Keys.UP ARROW_UP = Keys.ARROW_UP RIGHT = Keys.RIGHT ARROW_RIGHT = Keys.ARROW_RIGHT DOWN = Keys.DOWN ARROW_DOWN = Keys.ARROW_DOWN INSERT = Keys.INSERT DELETE = Keys.DELETE SEMICOLON = Keys.SEMICOLON EQUALS = Keys.EQUALS NUMPAD0 = Keys.NUMPAD0 NUMPAD1 = Keys.NUMPAD1 NUMPAD2 = Keys.NUMPAD2 NUMPAD3 = Keys.NUMPAD3 NUMPAD4 = Keys.NUMPAD4 NUMPAD5 = Keys.NUMPAD5 NUMPAD6 = Keys.NUMPAD6 NUMPAD7 = Keys.NUMPAD7 NUMPAD8 = Keys.NUMPAD8 NUMPAD9 = Keys.NUMPAD9 MULTIPLY = Keys.MULTIPLY ADD = Keys.ADD SEPARATOR = Keys.SEPARATOR SUBTRACT = Keys.SUBTRACT DECIMAL = Keys.DECIMAL DIVIDE = Keys.DIVIDE F1 = Keys.F1 F2 = Keys.F2 F3 = Keys.F3 F4 = Keys.F4 F5 = Keys.F5 F6 = Keys.F6 F7 = Keys.F7 F8 = Keys.F8 F9 = Keys.F9 F10 = Keys.F10 F11 = Keys.F11 F12 = Keys.F12 META = Keys.META COMMAND = Keys.COMMAND ''' helium.press(Keys.ENTER)