Python爬虫(十一)无头浏览器+规避检测

2,027 阅读3分钟

看到标题,你一定会很疑惑,什么是无头浏览器呢?

好巧,我第一次看到这个无头浏览器也是这么想的。那么无头浏览器是什么呢?

无头浏览器即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爬虫对无头浏览器的一个应用。

 

有好的建议,请在下方输入你的评论。