开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第26天,点击查看活动详情
Phantomjs
简介
Phantomjs是一个无界面的浏览器- 它支持页面元素查找,
js的执行等 - 不进行
css和gui的渲染,运行效率比真实浏览器快很多
备注:该软件已停更,
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')
从保存的快照中可以看出,当前的代码确实有生效,在搜索框中出现了我们写入的搜索条件。
封装
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)