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

这篇具有很好参考价值的文章主要介绍了Selenium 无头浏览器被知乎限制访问的解决方案。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

问题出现

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

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")

Selenium 无头浏览器被知乎限制访问的解决方案,selenium,测试工具

尝试的无效方案

添加启动参数

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

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 还是一个比较基简单的策略,基本到现在我们可能已经不会关注这一原始的反爬方式了。以后测试的时候还是要做到滴水不漏,不然又要像我一样耽误一大圈兜兜转转,最后用一行如此简单的代码解决……

对,另外已登录的账号不受这一限制,但是不建议大家冒险(小心封号啊文章来源地址https://www.toymoban.com/news/detail-620101.html

到了这里,关于Selenium 无头浏览器被知乎限制访问的解决方案的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 干货!一文搞定无头浏览器的概念以及在selenium中的应用

      无头浏览器,即 Headless Browser,是一种没有界面的浏览器。它拥有完整的浏览器内核,包括 JavaScript 解析引擎、渲染引擎等。与普通浏览器最大的不同是,无头浏览器执行过程中看不到运行的界面,但是我们依然可以用 GUI 测试框架的截图功能截取它执行中的页面。在这里强

    2023年04月12日
    浏览(43)
  • 『python爬虫』24. selenium之无头浏览器-后台静默运行(保姆级图文)

    欢迎关注 『python爬虫』 专栏,持续更新中 欢迎关注 『python爬虫』 专栏,持续更新中 一般性的selenium会打开浏览器页面,展示图形化页面给我们看,我们都应该知道命令行式的程序肯定比这种渲染图形化界面的程序快速高效。为了一定程度上缓解selenium慢的问题,我们可以采

    2024年02月07日
    浏览(68)
  • 针对于selenium的一些常规配置(防检测,无头,保留自己浏览器的登录信息等)

    在使用selenium的时候有时候会受到网站的检测导致我们的程序被迫中止,因此我们需要给selenium添加一些浏览器特征来防止被网站检测到**(1-4为防检测配置)**. 在给selenium添加参数的时候,我们可以使用add_argument selenium添加user-agent参数 去除 “Chrome正受到自动化测试软件的控制”

    2024年02月12日
    浏览(30)
  • 【selenium 无头浏览器练习】raise exception_class(message, screen, stacktrace) selenium.common.exceptions.

    raise exception_class(message, screen, stacktrace) selenium.common.exceptions.WebDriverException: Message: unknown error: net::ERR_CONNECTION_TIMED_OUT (Session info: headless chrome=113.0.5672.127) Stacktrace: Backtrace: GetHandleVerifier [0x00A08893+48451] (No symbol) [0x0099B8A1] (No symbol) [0x008A5058] (No symbol) [0x008A1843] (No symbol) [0x00898AC5] (

    2024年02月04日
    浏览(38)
  • pycharm + selenium + chromedriver创建Chrome无头浏览器及报错:unknown error: Failed to create Chrome process解决方案

    操作环境 win10 编译环境 pycharm python环境 Python3.9 114以前版本https://registry.npmmirror.com/binary.html?path=chromedriver/ 114以后版本https://googlechromelabs.github.io/chrome-for-testing/ Chrome浏览器下载(这里不多赘述) Chrome浏览器打开,(右上角)设置–(左下角)关于chrome–能看到浏览器版本号

    2024年04月23日
    浏览(37)
  • 什么是无头浏览器?如何使用Golang实现无头浏览器截图?

    在Web开发中,有时需要对网页进行截图,以便进行页面预览、测试等操作。 而使用无头浏览器来实现截图功能,可以避免手动操作的繁琐和不稳定性。 这篇文章将介绍: 使用Golang进行无头浏览器的截图,轻松实现页面预览、测试和模拟用户操作。 这篇文章发完,有朋友在朋

    2024年02月05日
    浏览(39)
  • 基于QWebEngine实现无头浏览器

    无头浏览器( Headless Browser )是一种没有图形用户界面(GUI)的浏览器。它通过在内存中渲染页面,然后将结果发送回请求它的用户或程序来实现对网页的访问,而不会在屏幕上显示网页。这种方式使得无头浏览器不仅适用于网络爬虫和测试等自动化任务,而且还能够更安全

    2024年02月09日
    浏览(41)
  • 无头浏览器puppeteer自动调用Dapp交易

    自动化调用dapp的方法一种是直接调用合约的方法进行交易,另一种是用无头浏览器通过操作dapp页面进行自动化交易。用到了puppeteer和@chainsafe/dappeteer两个库; puppeteer:无头浏览器 @chainsafe/dappeteer: 是封装好的在无头浏览器操作MataMask插件的库 以下是示例代码

    2024年02月17日
    浏览(33)
  • Linux无头浏览器的自动化测试实现

    Linux 下如何利用无头浏览器执行web自动化的用例?本文以centos 7为例,安装chrome、利用Python + conda +selenium简单演示执行自动化。 安装chrome浏览器 安装chromedriver Linux安装好Python环境-conda 设置Chrome为无头浏览模式(只在后台内存中执行、无浏览器页面) 准备测试用例 执行用例

    2024年02月15日
    浏览(38)
  • Python Headless Chrome(无头谷歌浏览器)

    在我们使用Selenium驱动ChromeDriver时,可以弹出谷歌浏览器,模拟人为操作谷歌浏览器,这就是自动化测试。虽然很厉害,但是也有一个很现实的问题,因为是要真实加载完整网页,导致效率低。在自动化测试时,我们其实只需要知道是测试完成还是未完成,至于能否看到完整

    2024年02月05日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包