Jason Sheh

用Chrome headless代替PhantomJS


0x00 起因
在Chrome 59之后Chrome提供了Headless模式,PhantomJS项目中的维护者表示

I don’t see any future in developing PhantomJS. Developing PhantomJS 2 and 2.5 as a single developer is a bloody hell.
详情见
Chrome比PhantomJS更加快速稳定,所以我以后的项目中,需要动态爬虫的地方都将使用Chrome代替PhantomJS.

0x01 准备工作
在python中我们可以使用selenium进行对浏览器的控制,先下载selenium

pip install selenium

之后需要下载相应的驱动,这里是ChromeDriver

建议把ChromeDriver.exe放在python/script目录下,可以在python中无需指定执行路径。

至此准备工作完成

0x02 启动Chrome

driver = webdriver.Chrome(chrome_options=chrome_options)

控制Chrome启动模式,加上相应参数

chrome_options = webdriver.ChromeOptions()

headless
chrome_options.add_argument("—headless")

# 禁用gpu,防止一些gpu引起的错误
chrome_options.add_argument("—disable-gpu")

# 设置日志模式为ERROR
chrome_options.add_argument("—log-level=3")

# 设置浏览器窗口大小
chrome_options.add_argument("—window-size=1920x1080")

# 禁用xss过滤器(在编写动态xss扫描器中使用)
chrome_options.add_argument("—disable-xss-auditor")

# 设置不显示图片,(个人测试无效,暂时保留)
chrome_prefs = {}
chrome_prefs["profile.default_content_settings"] = {"images": 2}
chrome_options.experimental_options["prefs"] = chrome_prefs

查询Chrome支持的所有参数

0x03 问题

  • 启动Chrome的同时,会同时在12xxx端口开启调试界面,打印一条信息

  • 无法关闭图片显示