Python-Helium翻译开发者Michael Herrmann的备忘单

Python-Helium翻译开发者Michael Herrmann的备忘单

Helium备忘单

这个页面非常快速地教你 Helium 的 API 最重要的部分。

导入

Helium 的所有公共函数都直接位于模块中helium。例如,您可以按如下方式导入它们:
from helium import *

启动浏览器

Helium 目前支持 Chrome 和 Firefox。您可以使用以下功能启动它们:

start_chrome ()
start_firefox ()

您可以选择传递一个 URL 来打开例如: start_chrome('google.com')

无头浏览器

当您键入上述命令时,您实际上会看到一个浏览器窗口打开。这对于开发脚本很有用。但是,一旦运行它们,您可能不希望出现此窗口。您可以通过添加headless=True:

start_chrome ( headless = True )
start_chrome ( 'google.com' , headless = True )

与网站交互

以下示例显示了 Helium 脚本中最典型的语句:

from helium import *
start_chrome('google.com')
write('helium selenium github')
press(ENTER)
click('mherrmann/helium')
go_to('github.com/login')
write('username', into='Username')
write('password', into='Password')
click('Sign in')
kill_browser()

您自己的大部分代码(希望)会像上面一样简单。

元素类型

上面的例子使用纯字符串Sign in来标识网页上的元素。但 Helium 还可以让您更具体地定位元素。例如:

  • Link('Sign in')
  • Button('Sign in')
  • TextField('First name')
  • CheckBox('I accept')
  • RadioButton('Windows')
  • Image(alt='Helium logo')

您可以将它们传递给其他函数,例如click(Link('Sign in')). 但您也可以使用它们从网站读取数据。例如:

print(TextField('First name').value)

一个常见的用例是用于.exists()检查元素是否存在。例如:

if Text('Accept cookies?').exists():
    click('I accept')

我也经常发现Text(...).value读取数据很有用:

name = Text(to_right_of='Name:', below=Image(alt='Profile picture')).value

查找与其他元素相关的元素

你已经在上一节如何看到above=...和to_right_of=... 让你发现相对于其他元素的元素。您可以类似地使用 below=...and to_left_of。这里还有一些例子。

Text(above='Balance', below='Transactions').value
Link(to_right_of='Invoice:')
Image(to_right_of=Link('Sign in', below=Text('Navigation')))

等待元素出现(或其他条件)

使用 wait_until(...) 等待条件成为现实。例如:

wait_until(Button('Download').exists)

但是您也可以使用它来等待任意条件:

wait_until(lambda: TextField('Balance').value == '$2M')

jQuery 风格的选择器

有时,您确实需要回退到使用 HTML ID、CSS 选择器或 XPath 来标识网页上的元素。Helium 的 S(...) 谓词可以让您做到这一点。您传递给它的参数解释如下:

  • 如果它以 an 开头@,则它通过 HTML 标识元素name。例如。S("@btnName")用 标识一个元素name="btnName"。
  • 如果它以 开头//,则 Helium 会将其解释为 XPath。
  • 否则,Helium 会将其解释为 CSS 选择器。这尤其允许您编写S("#myId")以使用 标识元素id="myId",或S(".myClass")使用 标识元素class="myClass"。

和以前一样,您可以结合S(...)其他功能,例如 click(S(...)),或使用它来提取数据。有关此示例,请参见 下文。

结合 Helium 和 Selenium 的 API

Helium 所做的只是将您的高级命令转换为低级 Selenium 函数调用。因此,您可以自由混合Selenium和Helium。例如:

# Helium 函数:
driver  =  start_chrome ()
 # Selenium API:
驱动程序。execute_script ( "alert('Hi!');" )

您还可以通过get_driver() 和 获取/设置 Helium 使用的 Selenium WebDriver set_driver(...)。

使用 WebDriver 实例,您可以执行您想要的任何 Selenium 命令。

要使用 Helium 的 API 来获取 Selenium WebElement,请使用web_element Helium的各种 GUI 元素的属性。例如:

# Get the CSS class of the "Helium" link:
Link('Helium').web_element.get_attribute('class')

查找所有元素

.web_element属性和S(...)谓词是从网页中提取数据的多个部分是特别有用的。为此,您可以使用 Helium 的find_all(...)功能。顾名思义,它可以让您找到页面上所有出现的元素。例如:

email_cells = find_all(S("table > tr > td", below="Email"))
emails = [cell.web_element.text for cell in email_cells]

隐式等待

当您发出诸如 之类的命令时click('Download'),默认情况下,Helium 最多等待 10 秒才能出现相应的元素。此功能称为“隐式等待”。您可以通过Configclass将 10 秒默认值更改为不同的值 :

Config.implicit_wait_secs = 30

但是,在执行此操作之前,最好在代码中添加显式等待,例如:wait_until(Button('Download').exists)

警报

本 Alert类 可以让你用JavaScript弹出对话框界面。使用Alert().accept(), Alert().dismiss()单击“确定”或“取消”,Alert().text阅读显示的消息,或write(..., into=Alert())输入值。

文件上传、拖放、组合框、弹出窗口

使用 attach_file(...), drag_file(...), drag(...), select(...), switch_to(...)。

在 x, y 坐标处单击

有时,您可能想要单击特定(x, y)坐标或元素的偏移量。请参阅 Point课程 以了解如何。

截屏

使用 Selenium 的 API:

get_driver().save_screenshot(r'C:\screenshot.png')

注意领先的r. 这是必需的,因为字符串包含反斜杠 \。


版权属于:Lam 所有,转载请注明文章来源。

本文链接: https://www.imlam.com/24.html

赞 (0)

评论区

评论一下~

字数
0
/300

暂无评论,要不来一发?

回到顶部