Python Selenium Headless:在无头模式下打开Chrome浏览器

本教程解释了我们如何用Python中的Selenium运行浏览器的无头模式。

在Python中使用Selenium以无头模式运行Chrome浏览器

谈到无头浏览器,你也可以称它们为真正的浏览器,但它们是在后台运行的;你将无法在任何地方看到它们,但仍然在后台运行。

会有几个场景,你需要这种无头浏览器。

因为当你在正常的浏览器中工作时,你会看到用户界面出现,并在本地系统上工作时操作其他应用程序。所以,你将无法执行任何其他操作,导致额外的操作在你面前运行。

假设你在无头模式下运行你的脚本。这样你就可以继续你的工作,有几个浏览器可以使用无头模式,如phantomJSHtmlUnit ,等等,请看这里。

我们也有Chrome和Firefox的无头选项。为了看看如何在Chrome的Selenium中以无头模式运行测试,我们首先需要创建一个Python文件。

我们将通过导入一些必要的类和模块来跳入代码。

import time
from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager
from selenium import webdriver
from selenium.webdriver.chrome.service import Service

我们刚刚注意到,webdriver.Chrom() 有不同的选项,你可以在下面看到。

Python Selenium Headless:在无头模式下打开Chrome浏览器

我们使用了一个service 参数,它应该启动Chrome浏览器会话。ChromeDriverManager() 将帮助我们下载驱动程序并设置path

我们将使用get() 方法,并传递给它一个URL ,在这里我们将尝试找到搜索框,然后我们将使用一些随机的文本,我们希望通过使用find_element() 来搜索。

DV=webdriver.Chrome(service=Service(ChromeDriverManager().install()))
DV.get('http://www.google.com')
DV.find_element(By.NAME,'q').send_keys('Elon Musk')
time.sleep(2)

如果我们运行python脚本,你会发现它不会在无头模式下运行,而是进入搜索框并搜索给定的查询。

Python Selenium Headless:在无头模式下打开Chrome浏览器

现在我们将使用名为options 的第二个参数,我们需要提供options 。我们有一个来自不同软件包的options 类;你可以在Opera、Chrome和Firefox上使用它。

由于我们使用的是Chrome,我们将使用来自Chrome.optionsOptions() 类。所以我们将创建一个名为OP 的对象来调用Options() 类。

在无头模式下,有两种options 或不同的方式来运行你的测试。首先,你必须使用add_argument() 方法并在其内部传递--headless

为了达到这个效果,我们必须把OP 传给options 参数。

import time
from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
OP=Options()
OP.add_argument('--headless')
DV=webdriver.Chrome(service=Service(ChromeDriverManager().install()),options=OP)
DV.get('http://www.google.com')
DV.find_element(By.NAME,'q').send_keys('Elon Musk')

当你完成后,你会看到测试将以无头模式运行,你将无法看到任何东西。

Python Selenium Headless:在无头模式下打开Chrome浏览器

为了检查是否被搜索到,我们将使用get_screenshot_as_file() 方法在无头模式下捕获屏幕截图。它将在无头模式下打开一个浏览器,并立即抓取屏幕截图。

DV.get_screenshot_as_file(os.getcwd()+'/screenshot.png')

现在我们得到了一个后台发生的截图t。

Python Selenium Headless:在无头模式下打开Chrome浏览器

假设你是一个一般会犯拼写错误的人,有时很难记住OP.add_argument('--headless') 。那么,我们还有一个选项:名为headless 的类型属性。

默认情况下,它被设置为False ,你可以把它改为True ,所以你不需要使用add_argument()

import time
from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
import os
OP=Options()
OP.headless=True
# OP.add_argument('--headless')
DV=webdriver.Chrome(service=Service(ChromeDriverManager().install()),options=OP)
DV.get('http://www.google.com')
# DV.find_element(By.NAME,'q').send_keys('Elon Musk')
DV.find_element(By.NAME,'q').send_keys('mark zuckerberg')
DV.get_screenshot_as_file(os.getcwd()+'/screenshot.png')

重新运行这个脚本后,我们得到了一个截图,显示了后台正在执行的操作。

Python Selenium Headless:在无头模式下打开Chrome浏览器