Selenium-python-helium

Web 自动化 Python 库
授权协议 MIT
开发语言 Python JavaScript HTML/CSS
所属分类 程序开发、 脚本编程语言
软件类型 开源软件
地区 不详
投 递 者 罗兴运
操作系统 未知
开源组织
适用人群 未知
 软件概览

Selenium-python 非常适合 Web 自动化,而 Helium 库能让它的使用变得更轻松:

Helium 将每个调用转发给 Selenium,不同之处在于 Helium 的 API 更高级。在 Selenium 中,您需要使用 HTML ID、XPath 和 CSS 选择器来识别网页元素。但 Helium 可以通过用户可见的标签来引用元素。因此,Helium 脚本通常比类似的 Selenium 脚本短 30-50%,而且 Helium 更易于阅读,并且在底层网页的变化方面更稳定。

因为 Helium 只是 Selenium 的包装器,所以你可以自由地混合这两个库。例如:

# A Helium function:
driver = start_chrome()
# A Selenium API:
driver.execute_script("alert('Hi!');")

除了更高级的 API 之外,Helium 还进一步简化了传统的 Selenium 中令人痛苦的任务:

  • Web 驱动程序管理: Helium 自带 ChromeDriver 和 geckodriver 的副本,因此你无需下载并将它们放在 PATH 中。
  • iFrame:与 Selenium 不同,Helium 允许与嵌套 iFrame 内的元素进行交互,而无需先“切换到”iFrame。
  • 窗口管理。Helium 会通知弹出窗口何时打开或关闭,还可以通过(部分)标题轻松切换到窗口,不需要遍历 Selenium 窗口句柄。
  • 隐式等待。默认情况下,如果您尝试使用 Selenium 单击某个元素并且该元素尚未出现在页面上,则您的脚本将失败。默认情况下,Helium 最多等待 10 秒才能显示元素。
  • 显式等待。Helium 为您提供了一个更好的 API,用于等待网页上的条件变为真。例如:在 Selenium 中

    等待元素出现,要这样编写:

element = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.ID, "myDynamicElement"))
)

在 Helium 中可以这样写

wait_until(Button('Download').exists)
  • 详细请见:    http://blog.csdn.NET/lcm_up/article/details/38302143

  • 总结下之前遇到的错误以及导致Xpath定位失败的原因,在网上找的资料特此整理如下: <h3>一、Xpath定位方法深入探讨</h3> (1)常用的Xpath定位方法及其特点 <h6>使用绝对路径定位元素。</h6> 例如: driver.findElement(By.xpath("/html/body/div/form/input"))。 特点:这个路径是从网页起始标签开始一直到要定位的元素的路

  • 1,问题: 当我们第一遍找元素是找到了,而你循环后页面已经新刷新,所以不能用第一遍找出的元素了 即:页面刷新后元素的属性是没变,但是element却变了,所有之前定位的元素element都过期了 2,解决方案 1.针对页面刷新后,之前的元素失效问题,在for循环体里面可以重新定位一次,覆盖掉之前旧的就行了。 2.第一次获取全部元素后,通过len函数获取总个数 3.for循环的时候不要循环定位元素的

  • 所谓浏览器的无头模式headless,就是浏览器在运行时处于后台操作的模式,不会看到浏览器打开,也就不会干扰你手头的工作。对于自动化测试和网络爬虫都有很大的价值。 早期我们使用 phantomJS 浏览器来实现这种模式,随着 Chrome 和 Firefox 都加入了无头模式, Selenium 逐渐停止对 phantomJS 的支持。 Chrome 的 headless Chrome 的无头模式

  • 目录 1、模块安装 2、模块使用 本博客将为各位分享Python Helium库,其是在 Selenium库基础上封装的更加高级的 Web 自动化工具,它能够通过网页端可见的标签、名称来和 Web 进行交互,据说比Selenium库简单50%,Helium库主要功能包括:模拟鼠标点击、滑动功能;模拟键盘按键功能;刷新网页功能等。 通过使用Helium库,了解其基本的API使用,即使不熟悉HTML、

  • Python能做的事情太多了,这里,我就用10行Python代码教你做一个白嫖工具,电影、音乐、电视剧统统自由自在下载! 各种各样的网站在我们日常工作和学习中占据着举足轻重的地位,学习、影音娱乐、查询资料、协同办公,越来越多的任务都被迁移到浏览器。 因此,网页也蕴含着很多有价值、我们能够用得到的资源。例如,数据、歌曲、影视、文本、图片。所以,这几年来爬虫这项技术也成了很多开发人员必备的技能之一。

  • 方案一: 利用selenium+phantomjs无界面浏览器的形式访问网站,再获取cookie值: from selenium import webdriver driver=webdriver.PhantomJS() url="https://et.xiamenair.com/xiamenair/book/findFlights.action?lang=zh&tripType=0&queryF

 相关资料
  • 为什么选python? 之前的菜鸟系列是基于java的,一年没学其实也忘的差不多了,目前所测的产品部分也是python写的,而且团队也在推广python ,其实就测试人员来说,python也相当受欢迎。易学,易用。翻翻各测试招聘,python出现的概率也颇高。 平台搭建: 前一篇中已经介绍,如果你也想体验一下自动化魅力,那就赶快搭建自己的环境吧~! selenium + python自动化测试环境

  • 本节知识点: 打印URL 将浏览器最大化 设置浏览器固定宽、高 操控浏览器前进、后退 打印URL 上一节讲到,可以将浏览器的title打印出来,这里再讲个简单的,把当前URL打印出来。其实也没啥大用,可以做个凑数的用例。 #coding=utf-8from selenium import webdriverimport time browser = webdriver.Firefox() ur

  • 本节重点: 简单对象的定位       --自动化测试的核心   对象的定位应该是自动化测试的核心,要想操作一个对象,首先应该识别这个对象。一个对象就是一个人一样,他会有各种的特征(属性),如比我们可以通过一个人的身份证号,姓名,或者他住在哪个街道、楼层、门牌找到这个人。 那么一个对象也有类似的属性,我们可以通过这个属性找到这对象。 定位对象的目的一般有下面几种 · 操作对象 · 获得对象的属性,

  • 本节要解决的问题: 层级定位 场景:   假如两个控件,他们长的一模样,还都叫“张三”,唯一的不同是一个在北京,一个在上海,那我们就可以通过,他们的城市,区,街道,来找到他们。   在实际的测试中也经常会遇到这种问题:页面上有很多个属性基本相同的元素,现在需要具体定位到其中的一个。由于属性基本相当,所以在定位的时候会有些麻烦,这时候就需要用到层级定位。先定位父元素,然后再通过父元素定位子孙元素。

  • 本节知识点: 操作对象: · click 点击对象 · send_keys 在对象上模拟按键输入 · clear 清除对象的内容,如果可以的话 WebElement 另一些常用方法: · text 获取该元素的文本 · submit 提交表单 · get_attribute 获得属性值 ====================================== 操作测试对象 前面讲到了不少知识都

  • 本节知识点: 多层框架或窗口的定位: switch_to_frame() switch_to_window() 智能等待: implicitly_wait() 对于一个现代的web应用,经常会出现框架(frame) 或窗口(window)的应用,这也就给我们的定位带来了一个难题。 有时候我们定位一个元素,定位器没有问题,但一直定位不了,这时候就要检查这个元素是否在一个frame中,seelnium

  • 本节重点: 调用js方法 execute_script(script, *args) 在当前窗口/框架 同步执行javaScript 脚本:JavaScript的执行。 *参数:适用任何JavaScript脚本。 使用: driver.execute_script(‘document.title’) 使快播登陆用户名输入框标红显示: #coding=utf-8from selenium impor

  • 本节重点 处理下拉框 switch_to_alert() accept()    下拉框是我们最常见的一种页面元素,对于一般的元素,我们只需要一次就定位,但下拉框里的内容需要进行两次定位,先定位到下拉框,再定位到下拉框内里的选项。 drop_down.html <html><body><select id="ShippingMethod" onchange="updateShipping(opti