一般情况下,我们常使用requests和selenium帮助我们获取网页数据,当然requests相对selemium速度要快得多,但很多requests爬取不到的数据,使用selenium却可以爬取到。正因为selemium速度比较慢(等待网页加载、网页中图片加载等问题),我们通常使用selenium获取网页数据时会使用一些配置,比如不希望加载图片等的配置,提升获取数据的速度。
本文主要针对以下问题进行输出:解决DevToolsActive文件不存在的报错、隐藏滚动条 —> 应对一些特殊页面(有的网站每页获取的数据较长,不模拟人工滚动下滑页面就无法获取底部数据)、谷歌文档规避bug、不加载图片、取消测试环境、无头模式 —> 浏览器不提供可视化页面、去除navigator.webdriver属性等问题
from selenium import webdriver
# 1、创建设置对象
options = webdriver.ChromeOptions()
# 2、解决DevToolsActive文件不存在的报错
options.add_argumwnt('--no-sanbox')
# 3、谷歌文档提到需要加上这个属性来规避bug
options.add_argument('--disable-gpu')
# 4、隐藏滚动条,应对一些特殊页面
options.add_argument('--hide-scrollbars')
# 5、不加载网页中的图片选其一
#(1)不加载图片,提升速度
options.add_argument('blink-settings=imagesEnable=false')
#(2)不加载图片,提升速度
options.add_experimental_option("prefs", {"profile.managed_default_content_settings.images": 2})
# 6、设置取消测试环境
options.add_experimental_option('excludeSwitches', ['enable-automation'])
# 7、无头模式 - 浏览器不提供可视化页面
# linux下如果系统不支持可视化不加这条会启动失败(无头浏览器)
# 减少了资源消耗的同时,增加了被反爬的风险
options.add_argument('--headless')
# 设置代理
options.add_argument('--proxy-server=http://代理服务器:端口')
# 避免终端下执行代码报错
options.add_experimental_option("excludeSwitches", ['enable-automation', 'enable-logging'])
# 加载拓展插件
# options.add_extension(插件路径)
# 设置请求头
UA = "Mozilla…………"
options.add_argument(f"--user-agent={UA}")
# 设置配置
browser = webdriver.Chrome(options=options)
# 加载用户缓存
# 可以像正常使用浏览器一样,记录使用记录和cookie
# 如果不指定缓存路径,不指定的时候会创建临时文件夹。
# 如果selenium实例没有正常销毁,那么当前缓存文件夹不会被删除。
user_dir = r'C:\userDir'
options.add_argument(f"--user-data-dir={user_dir}")
# 去除navigator.webdriver属性
browser.execute_cdp_cmd(
"Page.addScriptToEvaluateOnNewDocument",
{
"source": "Object.defineProperty(navigator, 'webdriver', {get: () => undefined})"
}
)
# 或者
options.add_argument("disable-blink-features=AutomationControlled")
URL = 'https://www.baidu.com/'
# 加载页面
browser.get(URL)
这类配置是固定好的,everybody可以用专门的文件夹保存起来,需要使用的时候直接复制在相应的代码程序中。