Python Headless Chrome(无头谷歌浏览器)

文章介绍了HeadlessChrome的概念,它是Chrome的一种无用户界面的模式,适用于自动化测试,能提高效率。通过Python的Selenium库,展示了如何配置和使用HeadlessChrome进行网页交互,包括设置无头模式、禁用GPU、控制窗口大小等,以实现更高效的自动化测试流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、什么是Headless Chrome

在我们使用Selenium驱动ChromeDriver时,可以弹出谷歌浏览器,模拟人为操作谷歌浏览器,这就是自动化测试。虽然很厉害,但是也有一个很现实的问题,因为是要真实加载完整网页,导致效率低。在自动化测试时,我们其实只需要知道是测试完成还是未完成,至于能否看到完整的UI对我们来说是不重要的,那Headless Chrome就是谷歌为此类需求定制的无UI浏览器,因为 UI 需要 CPU 和 RAM 开销,所以Headless Chrome会快很多。

先说下演示环境:

OS:Mac

Python:3.11.1

Chrome:111.0.5563.110

Selenium:4.8.3

2、不使用Headless Chrome

使用的功能:

  • webdriver.Chrome():返回一个 Chrome 驱动程序的实例,我们将通过它与 Chrome 浏览器进行交互。 
  • driver.get(url):向浏览器发送信号以获取指定的URL。 
  • driver.close():向浏览器发送信号以关闭自身。 
  • time.sleep(n):其中 n 是一个整数。将在指定的秒数内暂停脚本执行。我们需要它给我们时间来查看浏览器是否确实在运行。
import time

from selenium import webdriver

# 初始化浏览器
driver = webdriver.Chrome()

# 访问网页
driver.get('https://www.baidu.com')

# 睡眠5秒
time.sleep(5)

# 关闭浏览器
driver.close()

效果:

3、驱动Headless Chrome

在这里,我们将使用无头自动化浏览器,因为我们将使用此功能:

  • webdriver.Chrome():返回一个 Chrome 驱动程序的实例,我们将通过它与 Chrome 浏览器进行交互。
  • Options():通过这个类的属性我们可以发送浏览器启动参数。在我们的例子中,它是options.add_argument("--headless")它将启动没有 UI(无头)的浏览器。
  • driver.get(url):向浏览器发送信号以获取指定的URL。
  • print(driver.title):将网页标题打印到我们运行脚本的终端中。 
  • driver.close():向浏览器发送信号以关闭自身。 
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

# 配置选项
options = Options()

# 设置使用无头浏览器
options.add_argument("--headless")

# 初始化浏览器
driver = webdriver.Chrome(options=options)

# 访问网页
driver.get('https://www.baidu.com')

# 打印标题
print(driver.title)

# 关闭浏览器
driver.close()

4、选项

在需要频繁更新URL的脚步中,可以配置不加载图片等,可以加快速度

from selenium.webdriver.chrome.options import Options

# 配置选项
options = Options()

# 设置使用无头浏览器
options.add_argument("--headless=new")
# 禁用gpu加速
options.add_argument("--disable-gpu")
# 禁止浏览器被监控提示
options.add_experimental_option("excludeSwitches", ["enable-automation"])
# 不自动关闭浏览器
options.add_experimental_option('detach', True)
# 设置请求头user-agent
options.add_argument("--user-agent=''")
# 设置窗口最大化
options.add_argument('--start-maximized')
# 设置窗口大小
options.add_argument('--window-size=200,200')
# 无痕模式
options.add_argument('--incognito')
# 隐藏滚动条
options.add_argument('--hide-scrollbars')
# 禁用js
options.add_argument('--disable-javascript')
# 不加载图片(拦截图片)
options.add_argument('--blink-settings=imagesEnabled=false')

 所有选项可以看这里:

https://peter.sh/experiments/chromium-command-line-switches/

### 启动多个Google Chrome浏览器实例 通过PythonSelenium可以轻松启动并控制多个Chrome浏览器实例。这通常用于并发执行不同的任务或是模拟多用户的场景。 对于创建多个独立的Chrome浏览器实例,每开启一个新的实例都需要初始化一次`webdriver.Chrome()`对象[^1]: ```python from selenium import webdriver browser_1 = webdriver.Chrome() browser_2 = webdriver.Chrome() browser_1.get('https://www.example.com/') browser_2.get('https://www.wikipedia.org/') time.sleep(5) browser_1.quit() browser_2.quit() ``` 当希望在同一台机器上运行更多数量的浏览器实例时,则要考虑资源消耗以及可能遇到的操作系统限制等问题。另外,在某些情况下,如果想要所有的浏览器共享同一个会话(比如登录状态),则需要特别设置Chrome选项来指定用户数据目录[^2]: ```python from selenium import webdriver from selenium.webdriver.chrome.options import Options options = Options() user_data_dir = "/path/to/user/data/dir" options.add_argument(f"user-data-dir={user_data_dir}") for i in range(number_of_browsers): driver = webdriver.Chrome(chrome_options=options) driver.get("http://example.com") # 记得关闭所有打开的浏览器 ``` 值得注意的是,上述方法中的路径应当替换为实际存在的文件夹位置,并且number_of_browsers变量应被赋予期望的数量值。 为了进一步优化性能,还可以考虑采用无头模式(headless mode),即不显示GUI界面的方式运行浏览器,这对于服务器端部署尤为有用[^3]: ```python from selenium import webdriver from selenium.webdriver.chrome.options import Options chrome_options = Options() chrome_options.add_argument("--headless") # 设置为无头模式 chrome_options.add_argument('--disable-gpu') # 如果是Windows环境还需要加上这个参数 browsers = [] urls = ["url1", "url2"] # 替换成具体的URL列表 for url in urls: browser = webdriver.Chrome(options=chrome_options) browsers.append(browser) browser.get(url) # 完成工作后记得释放资源 for b in browsers: b.quit() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

全栈行动派

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值