in

Python中Selenium无头模式运行的完整指南

Python中Selenium无头模式运行的完整指南

Selenium是一个综合项目,提供了用于浏览器自动化的工具和库,支持包括Python在内的多种编程语言。简单来说,Selenium让你可以在没有UI的情况下运行浏览器,并测试网页应用。

Selenium的无头浏览器也广泛用于网页抓取,因为它们比有头浏览器速度更快且资源占用更少。在Python中无头运行Selenium还提供了更多的优化空间和更好的编程控制。


运行Selenium的准备工作

在使用Selenium运行无头浏览器之前,你需要先安装Python和一个集成开发环境(IDE)。你可以从Python的官方网站下载Python

市面上有很多IDE,各具特色,但对于Python浏览器模拟来说,PyCharm Community Edition是一个不错的起点。它是一个免费的IDE,完全适用于所有Python编程。

安装完Python和PyCharm后,打开PyCharm并创建一个新项目。

接下来,你需要安装Selenium库。你可以在PyCharm中打开终端,然后输入:

pip install selenium

PyCharm会自动下载、解压并安装Selenium库。这个库只会对当前项目可用。虽然你可以永久安装它们,但对于小项目来说,这并不是必需的。

最后,你可能需要找到一个无头浏览器驱动。无头Selenium通过使用现有的浏览器驱动程序运行。当前版本应该附带了所有主流浏览器的驱动程序。


以Headful模式运行Selenium

我将首先在headful模式下测试Selenium,以确保一切正常运行。

首先从Selenium导入webdriver:

from selenium import webdriver

然后,我们将定义一个接受URL参数的函数:

def open_browser(URL: str):
    browser = webdriver.Chrome()
    browser.get(URL)
    browser.quit()

open_browser('https://www.amazon.com/')

我们的第一行代码定义了函数及其参数(URL)。虽然添加“: str”不是必须的,但它限制了输入只能是字符串,从而减少了人为错误的可能性。如果你打算使用其他数据格式,请确保将其移除。

“browser”创建了一个值为“webdriver.Chrome()”的对象,这实际上创建了一个webdriver对象,我们稍后将用它来执行某些操作。

然后,“browser.get(URL)”使用浏览器对象的方法“get”来访问指定的URL。在页面完全加载后,浏览器会因为“browser.quit()”而自动退出。

最后,我们在括号和引号之间传入我们想要的URL,调用函数“open_browser”。

点击右上角的绿色箭头来执行代码。如果一切正常,浏览器会自动打开并访问亚马逊的主页。

d8ghMyX.png

如果在执行代码时遇到缺少webdriver的错误,你需要手动下载webdriver。由于我将使用Chrome的webdriver,你可以从测试库下载它。确保下载与你的操作系统相适应的‘chromedriver’。


切换到Selenium Headless (无头)模式

在前面的示例中,浏览器打开并访问了带有完整GUI的主页。出于测试和web抓取的目的,大多数人选择不带头地运行Selenium。

我们必须添加另一个导入,它将允许我们调整Selenium chromedriver headless选项。

from selenium import webdriver
from selenium.webdriver import ChromeOptions

现在必须向函数中添加三行新代码:

def open_browser(URL: str):
    options = ChromeOptions()
    options.add_argument("--headless=new")
    browser = webdriver.Chrome(options=options)
    browser.get(URL)
    browser.quit()

open_browser('https://www.amazon.com/')

‘Options’创建了一个对象,用来存储Chrome无头浏览器的选项。然后我们会使用‘.add_argument’方法添加一个字符串,告诉浏览器以无头模式运行。

最后,我们需要调整‘browser’对象,以包含我们的Chrome无头Selenium命令。

现在,我们可以再次点击相同的绿色箭头来执行代码。

d8ghMyX.png

请注意,由于我们运行的是无头浏览器,界面上‘什么都不会发生’。Python还提供了一些选项,使Selenium的无头模式更加出色。


运行一个URL列表

在几乎所有情况下,您都将使用Selenium来运行更大的url列表,而不是单个url列表。我们可以通过改变函数来实现:

def open_browser(URL):
    options = ChromeOptions()
    options.add_argument("--headless=new")
    browser = webdriver.Chrome(options=options)
    for i in URL:
        browser.get(i)
    browser.quit()

我们的函数现在将接受序列对象(列表,元组,字典等),因为我们已经使用了“for”循环。在调用该函数时,我们必须输入其中一个对象,然后浏览器将依次访问每个URL。

我们还需要添加一个字典对象:

list_of_urls = ['https://www.amazon.com/', 'https://www.amazon.com/Best-Sellers-Amazon-Devices-Accessories/zgbs/amazon-devices/']
open_browser(list_of_urls)

字典中的每个对象都用逗号分隔,你可以添加任意多个对象。然而,当前函数不接受不在序列对象中的单个字符串。

在执行代码之前,建议将‘.add_argument’方法注释掉(在代码行的左侧使用#号)。否则,Python的Selenium无头模式将会激活,你将无法看到是否一切如预期运行。

以下是完整的代码块:

from selenium import webdriver
from selenium.webdriver import ChromeOptions

def open_browser(URL):
    options = ChromeOptions()
    options.add_argument("--headless=new")
    browser = webdriver.Chrome(options=options)
    for i in URL:
        browser.get(i)
    browser.quit()

list_of_urls = ['https://www.amazon.com/', 'https://www.amazon.com/Best-Sellers-Amazon-Devices-Accessories/zgbs/amazon-devices/']
open_browser(list_of_urls)

结    论

你只需要几行代码就可以运行Selenium无头浏览器。然而,Python为你提供了更多的选项,在自动化过程中,你将不仅仅是以无头模式打开一个浏览器。

Written by 河小马

河小马是一位杰出的数字营销行业领袖,广告中国论坛的重要成员,其专业技能涵盖了PPC广告、域名停放、网站开发、联盟营销以及跨境电商咨询等多个领域。作为一位资深程序开发者,他不仅具备强大的技术能力,而且在出海网络营销方面拥有超过13年的经验。