Selenium 无头浏览器被知乎限制访问的解决方案

news2024/11/26 4:34:12

问题出现

我尝试使用如下代码爬取知乎的有关内容,出现知乎安全验证界面:

def init_driver():
    options = Options()
    options.add_argument("--headless")
    options.add_argument('--disable-gpu')
    driver = webdriver.Chrome(options=options)
    return driver

if __name__ == '__main__':
    driver = init_driver()
    driver.get("https://www.zhihu.com/question/610796576/answer/3110013198")

1688908807100

尝试的无效方案

添加启动参数

在网上的许多文章中,反复提到了如下三行代码,然而我将他们加入代码后没有什么效果:

options.add_argument('--disable-blink-features=AutomationControlled')
options.add_experimental_option('excludeSwitches', ['enable-outomation'])
options.add_experimental_option("useAutomationExtension", False)

JavaScript特殊全局变量

有一些文章提到,通过 WebDriver 启动的网页会存在一些特殊的 JS 变量,这些变量可能会被网站的 JS 识别,例如navigator.webdriver。我尝试在init_webdriver底部加入如下代码,也没有生效。

    driver = webdriver.Chrome(options=options)
    script = '''
Object.defineProperty(navigator, 'webdriver', {
get: () => undefined
})
'''
    driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument",
                           {"source": script})
    return driver

也有文章提到,类似的特征变量有二十多个,幸好我知难而退放弃了去一个一个找出来的想法(要是)

其余方案

也看到有知乎网友提出与浏览器指纹有关,声称自己修改特征变量的名称后重新编译 WebDriver 成功解决问题,但是我没有尝试这一方案,不然的话一周后也不一定能有这一篇文章的发布

最终成功的方案

偶然想起查资料的过程中,有人提到在默认情况下,headless 模式打开的浏览器会使用一个包含 headless 关键字的特殊 UA,那么知乎是否是通过这一最简单的方式进行的识别呢?为验证这一猜想,我先将 headless 选项禁用,发现脚本可以正常访问知乎。

那么问题的解决就变得十分简单了,只需要自行指定 UA 即可。最终的init_driver函数:

def init_driver():
    options = Options()
    options.add_argument("--headless")
    options.add_argument('--disable-gpu')
    options.add_argument(
        '--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'
    )
    driver = webdriver.Chrome(options=options)
    return driver

一些思考

知乎还是我见过的所有网站中反爬策略比较高级的,从未有人能成功解开他的接口数据加密(有点过于绝对,但至少没公开过),2023年4月以后我更是没见过任何可用的 API 问世。然而仅这一次无头浏览器的限制来看,UA 还是一个比较基简单的策略,基本到现在我们可能已经不会关注这一原始的反爬方式了。以后测试的时候还是要做到滴水不漏,不然又要像我一样耽误一大圈兜兜转转,最后用一行如此简单的代码解决……

对,另外已登录的账号不受这一限制,但是不建议大家冒险(小心封号啊

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/819447.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Wi-Fi 6技术详解

1. 介绍 Wi-Fi 6,也称为802.11ax,是Wi-Fi技术的最新标准。它是对之前标准Wi-Fi 5(802.11ac)的升级和改进,旨在提供更高的速度、更大的容量、更好的性能和更高的可靠性。Wi-Fi 6技术的引入为无线网络带来了革命性的变化…

移远通信首批加入“5G+eSIM计算终端产业合作计划”,助力大屏移动终端全时在线

7月29日,在全球数字娱乐产业盛会 ChinaJoy上,中国联通携手高通公司、GSMA发布了“5GeSIM 计算终端产业合作计划”。 作为全球领先的物联网整体解决方案供应商,移远通信首批加入该计划,副总经理刘明辉受邀参加5GeSIM 计算终端产业合…

JavaScript创建,写入,复制,读取文件 只限IE ActiveX控件

最近接到需求,需要纯前端, 操作写入改变文件,一时间头大不已,还好此需求只需要屏幕展示,无需顾及兼容问题,找来找去找到了new ActiveXObject(“Scripting.FileSystemObject”) 强大控件 以下为自己记录的 …

安装nvm使用nvm管理node切换npm镜像后使用vue ui管理构建项目成功

如果安装nvm前已经单独安装过node.js的请先自行卸载原有node和环境变量里面的配置; 亲测成功,有哪些问题可以在评论区发消息或者私聊我 1、安装nvm的步骤如下 下载nvm安装包 在nvm的GitHub仓库,如下是国内镜像仓库: 点击这里跳…

心法利器[93] | 谈校招:技术面

心法利器 本栏目主要和大家一起讨论近期自己学习的心得和体会,与大家一起成长。具体介绍:仓颉专项:飞机大炮我都会,利器心法我还有。 2022年新一版的文章合集已经发布,累计已经60w字了,获取方式看这里&…

Open vSwitch(OVS虚拟交换机)

Open vSwitch(OVS) Open vSwitch(OVS)是一个开源的多层虚拟交换机,用于构建和管理软件定义网络(Software-Defined Networking,SDN)环境。它提供了一种灵活、可扩展的网络虚拟化解决…

单硬盘笔记本系统无损迁移(Ghost)方法

有一台笔记本启动使用UEFI方式,由于硬盘(SSD)发热问题想更换另一块SSD硬盘,但是由于笔记本就一个m.2接口,没有办法直接进行两块硬盘的系统迁移。 解决办法: 1、将老硬盘的系统通过Ghost软件克隆成一个gho文件&#x…

【MybBatis高级篇】MyBatis 拦截器

【MybBatis高级篇】MyBatis 拦截器 拦截器介绍实现拦截器注册拦截器应用ymlDynamicSqlDao 层代码xml启动类拦截器核心代码代码测试 拦截器应用场景 MyBatis 是一个流行的 Java 持久层框架,它提供了灵活的 SQL 映射和执行功能。有时候我们可能需要在运行时动态地修改…

如何解决 Scratch 中很难去除的bug?

大家好,今天我们就来讲讲我们在使用Scratch编程中遇到的一些典型的bug,相信也有你遇到的,我这里讲的名称稍微专业了一点,但是也希望你都能看完整篇文章,说不定就有你遇到的,给作者一个关注和赞吧&#xff0…

Vue如何做一个左边栏

要求一-------点击之后能够实现页面跳转,使用router,点击之后跳到指定页面: 第二步:如何实现简易的前端路由 第三步 左侧边栏的正确写法,ul中li套router-link 第四步 实现嵌套路由 第五步 ul中嵌套着li 第六步嵌套路由 第七步&…

elementUI 实现动态表单数据校验

转载http://t.csdn.cn/XuTa2 1、探讨需求 首先我们需要探讨一下需求: 表单中的部分el-form-item 的label都是从接口拿到的,需要遍历进行动态渲染。 需要给每个el-form-item加上校验至少是必填校验 有的el-form-item不需要校验,也不是从接口…

express学习笔记1 - 框架搭建

1、创建项目 mkdir admin-node cd admin-node npm init -y 安装依赖 npm i -S express 创建 app.js const express require(express)// 创建 express 应用 const app express()// 监听 / 路径的 get 请求 app.get(/, function(req, res) {res.send(hello node) })// 使 …

GoogleLeNet Inception V2 V3

文章目录 卷积核分解第一步分解,对称分解第二步分解,非对称分解在Inception中的改造一般模型的参数节省量可能导致的问题 针对两个辅助分类起的改造特征图尺寸缩减Model Regularization via Label Smoothing——LSR问题描述,也就是LSR解决什么…

问道管理:市盈率市净率市销率三者之间的关系?

市盈率、市净率和市销率是股票剖析中最常用的三种金融目标,它们是评价股票价值和价格是否合理的重要工具。那么,三者之间到底有什么联系呢?本文将从多个视点进行剖析。 1. 基本概念 市盈率 (PE Ratio) 是一个衡量公司的股价相对于其每股收益…

安卓音视频多对多级联转发渲染

最近利用自己以前学习和用到的音视频知识和工程技能做了一个android的sdk,实现了本地流媒体ipc rtsp 拉流以及自带mip usb等camera audio节点产生的流媒体通过webrtc sfu的方式进行多对多级联发布共享,网状结构,p2p组网,支持实时渲染以及转推rtmp&#x…

Java版工程行业管理系统源码-专业的工程管理软件- 工程项目各模块及其功能点清单

 工程项目管理软件(工程项目管理系统)对建设工程项目管理组织建设、项目策划决策、规划设计、施工建设到竣工交付、总结评估、运维运营,全过程、全方位的对项目进行综合管理 工程项目各模块及其功能点清单 一、系统管理 1、数据…

【Android】APP启动优化学习笔记

启动优化目的 用户体验: 应用的启动速度直接影响用户体验。用户希望应用能够快速启动并迅速响应他们的操作。如果应用启动较慢,用户可能会感到不满,并且有可能选择卸载或切换到竞争对手的应用。通过启动优化,可以提高应用的启动…

Inobitec DICOM Viewer Pro 2.11.0 Crack

Inobitec DICOM Viewer Pro 2.11.0 专业DICOM查看器、匿名器、转换器、PACS客户端、迷你PACS服务器、患者CD/DVD刻录机(带查看器)等功能的医学影像专业必备的DICOM工作站和查看器 动态渐进版本(每季度发布)扩展功能 高级 3D 重建 以 OBJ、STL、PLY、…

uni-app:实现分页功能,单击行获取此行指定数据,更改行样式

效果&#xff1a; 分段解析代码 分页功能实现&#xff1a; 一、标签 1、搜索栏-模糊查询 <!-- 搜索框--><form action"" submit"search_wip_name"><view class"search_position"><view class"search"><…

【AGC】Publishing API调用问题汇总

【问题背景】 开发者可以通过Publishing API完成几乎所有应用的管理和发布工作&#xff0c;自己制定自动发布接口。Publishing API有很多接口&#xff0c;包括了查询应用信息、更新应用信息、上传文件、提交发布等主要接口。下面总结了一些开发者在使用Publishing API过程中容…