Python爬虫入门 ~ Chrome handless

238 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第26天,点击查看活动详情

Phantomjs

简介

  1. Phantomjs是一个无界面的浏览器
  2. 它支持页面元素查找,js的执行等
  3. 不进行cssgui的渲染,运行效率比真实浏览器快很多

备注:该软件已停更,selenium已不推荐使用该软件. (Selenium support for PhantomJS has been deprecated, please use headless)

Chrome handless

简介

Chrome handless模式,是谷歌针对Chrome浏览器新增的一种模式,可以让使用者在不打开UI界面的情况下运行浏览器。

用法

该模式使用非常方便,就跟我们前面解决闪退的问题一样,通过ChromeOptions就可以实现。在ChromeOptions中,我们给他加上两个参数即可开启该模式:

  • --headless:开启无界面模式
  • --disable-gpu:禁用GPU
from selenium import webdriver
from selenium.webdriver.chrome.service import Service

options = webdriver.ChromeOptions()
options.add_experimental_option('detach', True)
options.add_experimental_option('excludeSwitches', ['enable-automation'])
options.add_argument('--headless')
options.add_argument('--disable-gpu')

path = 'chromedriver.exe'
browser = webdriver.Chrome(service=Service(path), options=options)

url = 'https://www.baidu.com/'
browser.get(url)

开启了之后由于没有界面,小伙伴可能不知道是不是真的生效,那么我们可通过保存快照来查看,案例如下:

# 获取输入框,输入搜索条件
input = browser.find_element(By.ID, 'kw')
input.send_keys('掘金')

# 休眠2秒
time.sleep(2)

# 保存快照
browser.save_screenshot('juejin.png')

image.png

从保存的快照中可以看出,当前的代码确实有生效,在搜索框中出现了我们写入的搜索条件。

封装

Chrome_headless和前面直接使用selenium,在代码的处理逻辑上是没有区别的,两者的区别在于一个会打开UI界面,一个是无界面的,效率上无界面的会更快一些,少了一些页面的渲染,我们跑大量的任务事,无界面会更适合我们,调试的时候才将界面放出来进行调整优化。

由于该浏览器对象是经常需要被创建使用的,我们可以将其封装成一个函数,返回值就是browser对象,这样别的地方引用该函数即可直接传入链接使用,不用每次都重新再构建设置一遍各种参数。

from selenium import webdriver
from selenium.webdriver.chrome.service import Service

def build_browser():
    options = webdriver.ChromeOptions()
    options.add_experimental_option('detach', True)
    options.add_experimental_option('excludeSwitches', ['enable-automation'])
    options.add_argument('--headless')
    options.add_argument('--disable-gpu')

    path = 'chromedriver.exe'
    return webdriver.Chrome(service=Service(path), options=options)