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
使用的功能:
1)webdriver.Chrome():返回一个 Chrome 驱动程序的实例,我们将通过它与 Chrome 浏览器进行交互。
2)driver.get(url):向浏览器发送信号以获取指定的URL。
3)driver.close():向浏览器发送信号以关闭自身。
4)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
在这里,我们将使用无头自动化浏览器,因为我们将使用此功能:
1)webdriver.Chrome():返回一个 Chrome 驱动程序的实例,我们将通过它与 Chrome 浏览器进行交互。
2)Options():通过这个类的属性我们可以发送浏览器启动参数。在我们的例子中,它是options.add_argument("--headless")它将启动没有 UI(无头)的浏览器。
3)driver.get(url):向浏览器发送信号以获取指定的URL。
4)print(driver.title):将网页标题打印到我们运行脚本的终端中。
5)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')
所有选项可以看这里:
List of Chromium Command Line Switches « Peter Beverloo
5、无界面且用代理模式
import time
from selenium import webdriver
"""使用无界面模式"""
option = webdriver.ChromeOptions()
option.add_argument('--headless') # 开启无界面模式
option.add_argument('--disable-gpu') # 禁用显卡
option.add_argument("--user-agent=Mozilla/5.0 HAHA") # 替换UA
proxy_str = '219.234.5.128:3128'
option.add_argument('--proxy-server=https://{}'.format(proxy_str)) # 使用代理ip
driver = webdriver.Chrome(executable_path='/home/python/Desktop/spider/driver/chromedriver', chrome_options=option)
driver.get("https://www.baidu.com/")
time.sleep(3)
print(driver.find_element_by_id('su').get_attribute('value'))
driver.quit()