看到标题,你一定会很疑惑,什么是无头浏览器呢?
好巧,我第一次看到这个无头浏览器也是这么想的。那么无头浏览器是什么呢?
无头浏览器即headless browser,是一种没有界面的浏览器。它有浏览器该有的一切功能,除了界面。可以通过命令进行浏览器内的各种操作。
我们日常使用浏览器的步骤为:启动浏览器、打开一个网页、进行交互。在无头浏览器中,我们可以通过程序或脚本来执行以上过程,从而模拟出真实的浏览器使用场景。
一:常用的无头浏览器
常用的无头浏览器一般有chrome,还有基于selenium的PhantomJS。
推荐使用chrome,PhantomJS已经停止更新维护了。
二:无头浏览器的应用场景
有了无头浏览器,我们就能做包括但不限于以下事情:
1. 对网页进行截图保存为图片或 pdf
2. 做表单的自动提交、UI的自动化测试、模拟键盘输入等
3. 用浏览器自带的一些调试工具和性能分析工具帮助我们分析问题
4. 写爬虫,抓取站点数据
5. Web自动化测试
6. 抓取单页应用(SPA)执行并渲染(解决传统 HTTP 爬虫抓取单页应用难以处理异步请求的问题)
7. 执行DDOS攻击
8. 增加广告展示次数
9. 认证信息填充(自动登录等)
三:无头请求实际应用
上边说的这么热闹,那么无头请求应该怎么去编写呢?上代码:
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# @Time : 2022/3/15 19:18
# @Author : stone
# @Email : 805795955@qq.com
# @File : noHeader.py
# @Software: PyCharm
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import time
from time import sleep
# 创建一个参数对象 用来控制chrome以无界面模式打开
chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
# 创建一个浏览器
browser = webdriver.Chrome(chrome_options=chrome_options)
# 浏览器最大化
browser.maximize_window()
# 无头浏览器访问我的博客
browser.get('https://guanchao.site')
sleep(5)
# 截图保存
browser.save_screenshot('./browserImage.png')
# 打印首页数据
# print(browser.page_source)
print('截图成功!')
browser.quit()
执行上边的代码,输出网页源码,即为使用成功
四:规避检测
随着selenium应用不断的增加,现在有不少大网站有对selenium采取了监测机制,比如正常情况下我们浏览器访问淘宝等网站的window.navigator.webdrive值为undefined,而使用selenium访问则该值为true,那么如何解决这个问题呢?
只需要设置Chromedriver的启动参数即可解决问题,在启动chromedriver之前,为chrome开启实验性功能参数excludeSwitches,他的值为[‘enable-automation’]
上代码:
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# @Time : 2022/3/15 19:18
# @Author : stone
# @Email : 805795955@qq.com
# @File : noHeader.py
# @Software: PyCharm
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from time import sleep
from selenium.webdriver import Chrome
from selenium.webdriver import ChromeOptions
# ==========================================
# 规避检测在这里
option = ChromeOptions()
option.add_experimental_option('excludeSwitches',['enable-automation'])
# 创建一个参数对象 用来控制chrome以无界面模式打开
chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
# ==========================================
# 创建一个浏览器(第一个参数是无头浏览器,第二个参数是规避检测)
browser = webdriver.Chrome(chrome_options=chrome_options,options=option)
# 浏览器最大化
browser.maximize_window()
# 无头浏览器访问我的博客
browser.get('https://guanchao.site')
sleep(5)
# 截图保存
browser.save_screenshot('./browserImage.png')
# 打印首页数据
# print(browser.page_source)
print('截图成功!')
browser.quit()
注意我代码中的注释。
以上大概就是python爬虫对无头浏览器的一个应用。
有好的建议,请在下方输入你的评论。