Helium | Python自动化Web任务

小北的北 2024-10-10 08:03:01 阅读 50

点击下方卡片,关注“小白玩转Python”公众号

你有没有遇到过想要自动化的任务?例如,我们可能需要填写一些重复的在线表格。我们要么需要完成多个,要么需要定期完成。作为程序员,我们有自己的方法来处理这些需求。这就是Web自动化。在Python中,有很多库允许我们这样做,比如Scrapy,它帮助我们从网站抓取信息,还有可能是最著名的Selenium。Selenium使我们能够在网页上进行更多的交互动作。

然而,我发现了了一个更高级别的Web自动化库 —— Helium,它利用了Selenium使得自动化Web相关任务变得非常简单。

安装

要安装Helium,我们可以简单地运行以下pip命令。

<code>pip install helium

需要注意的是,Helium支持两种浏览器,Chrome和Firefox。因此,我们还需要确保我们的操作系统中安装了这些浏览器之一。使用Chrome或Firefox没有区别。所以,我将在本文中为了演示目的使用Chrome。

快速开始

正如前面提到的,Helium是我见过的最易于使用的Web自动化库之一。如果你曾经使用过其他库,比如Scrapy或Selenium,你应该记得它们在我们可以对这些元素做一些事情之前,需要相当复杂的逻辑来选择HTML元素。

Helium的创新之处在于,我们可以直接对HTML元素执行操作,而无需选择它们,只要它们有值。不是,让我们一起来看看这个。首先,让我们将Helium导入会话并启动一个Chrome浏览器实例。

import helium as hl

hl.start_chrome("www.google.com")

正如你所见,当我们启动浏览器时,我们可以传递URL,以便浏览器可以打开这个网页。

bcce35feab7ca8ac78cfb458340c614c.png

然后,我们可以直接写入搜索文本字段,因为谷歌在打开其首页时使其成为默认焦点。

<code>hl.write('towards data science')

611ef581ced0f2451c8655bd71ae569c.gif

然后,让我们“按下”回车键。

<code>hl.press(hl.ENTER)

c41884def7b99f041fe8e6f23e9d25ea.gif

之后,这里有一个小把戏。如果我们想点击第一个链接,“Towards Data Science”,它实际上可能会点击搜索字段。这是因为按值匹配的原则只能找到第一个具有给定值的HTML元素。

因此,如果我们运行代码hl.click("Towards Data Science"),我们可能不会得到我们预期的结果。为了解决这个问题,我们可能需要使用一些其他技术。然而,让我们在这里保持简单。假设我们想点击搜索结果中“Towards Data Science”下的第一个链接。这要容易得多,因为它非常明确。

<code>hl.click("Python")

5c82f672c2d435b847191e1ae7375963.gif

现在,让我们稍微滚动一下。我们可以指定滚动多少像素。在这种情况下,让我们做200像素。

<code>hl.scroll_down(num_pixels=200)

d9bebee0b0c801d36f23b712fbc7b86f.gif

最后,不要忘记关闭浏览器以释放资源。同时,为了确保我们的自动化任务是可重复的,关闭浏览器并确保每次运行都是原子的和自包含的是一种好习惯。要做到这一点,我们只需要调用kill_browser()方法。

<code>hl.kill_browser()

f4e2872b187a6c7f5219f9d94b21f307.gif

正如我们所看到的,使用这个库在网页上执行常见任务非常简单。除了演示的功能外,Helium还提供了更多开箱即用的功能,例如:

drag(element, to) 接受要拖动的HTML元素和目的地作为参数。

hover() 模拟鼠标悬停在元素上方

rightclick() 和 doubleclick()

drag_file(r"C:\Documents\notes.txt", to="Drop files here") 模拟将文件拖到HTML区域

attach_file(r"c:/test.txt", to="Please select a file...") 模拟附加文件

我相信,有了上述封装在函数中的常见操作,我们已经可以做很多事情了。然而,如果你仍然不满意,让我在后续部分介绍一些更多的技巧,这些技巧允许我们处理更复杂的情况。

使用XPath

596daa06a01bb77b07c3205274ed0dd3.png

如果你熟悉HTML,我认为你一定知道XPath。如果你不知道,有很多资源和教程可以教你语法。基本上,它允许我们使用特定的字符串表达式来选择HTML元素。

在上面的快速开始部分,我们假设谷歌搜索页面默认聚焦在搜索文本字段上。然而,如果,在其他一些场景中,情况并非如此呢?

d11b0d25e92917f85159879673f15446.png

上面的截图显示,我故意点击了文本字段之外,以便失去焦点。然后,我回来运行hl.write()方法,它不再起作用了。

在这种情况下,我们可以使用XPath来明确告诉方法在哪里写文本。语法是使用方法hl.S("<XPath_Expression>")。

<code>hl.write("towards data science", into=hl.S("//textarea[@title='Search']"))code>

add4cccfb4729ac86672e353278190cf.gif

除了hl.write()方法,我们还可以在Helium中以许多其他方式使用XPath。例如,我们也可以使用方法hl.click(hl.S("<XPath_Expression>"))来点击某个HTML元素。

等待直到条件为真

另一个我非常喜欢的功能是“等待直到”。例如,有些网站在完全加载后可能会弹出一些窗口或模态视图。这通常很难捕捉,因为我们不知道它何时会发生。

让我们尝试一下。在下面的代码中,我们使用hl.go_to()方法返回谷歌搜索。然后,让我们等待网页上出现文本“Christopher Tao”。当然,我们可以利用搜索文本字段来做到这一点。一旦检测到文本,我们要求Python会话输出一些东西。

<code>hl.go_to("www.google.com")

hl.wait_until(

hl.Text("Christopher Tao").exists,

timeout_secs=999

)

print("Christopher Tao input already!")

d55cf14e52497f5763e2caebee81301c.png

在上面的代码中,我设置了timeout_secs=999,以便我在搜索字段中输入我的名字。默认超时是10秒,所以如果需要,请记住重新配置。

总结

在本文中,我介绍了一个名为Helium的库。它可以帮助我们自动化Web相关任务。与其他大多数做同样事情的库不同,它可能是最容易使用的,因为它的高级包装函数和智能实现。

·  END  ·

🌟 想要变身计算机视觉小能手?快来「小白玩转Python」公众号!

回复Python视觉实战项目,解锁31个超有趣的视觉项目大礼包!🎁

c4bbd28125217edd4899f454b6b2bbcd.png

本文仅供学习交流使用,如有侵权请联系作者删除



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。