首页 > 编程语言 > python

编程语言【selenium】headless模式下遇到403反爬虫校验(Human verification)

admin python 2021-05-25 09:24:12 爬虫 校验 模式下 headless Selenium 
后台-系统设置-扩展变量-手机广告位-内容正文底部

headless模式下遇到 403 反爬虫校验 (Human verification)

被反爬虫校验困扰了很久,今天终于解决,在此记录一下。

问题描述

工作需要爬取一些文章,本来想使用 go 简单写一下,没想到遇到了反爬虫的人机校验,页面被拦截,返回 403 ,于是后面遇到了一个又一个的问题。
期间尝试了 go 的 xpath,colly,以及 chromedp,均没有成功。
后来又尝试 python 的 scrapy ,最后是在尝试 selenium 关闭 headless 时,成功避开了 Human verification 。但是开启 headless 还是会出现 403 。

后来,在本地可以正常运行,但是部署到 linux 系统下,又冒出了新的问题,chromedriver 调用 chrome 失败,因为 chrome 在启动期间崩溃了。
在 stackoverflow 上查到是的解决方式一一尝试后均未解决,最后发现都需要设置一下 options.add_argument('--headless')
也就是说,最后还是要把 headless 启动,但是启动 headless 又会遇到 Human verification 。

兜兜转转一圈,最后还是要解决 403 的问题。

解决方式

因为在尝试 scrap y时,scrapy 是配置了 User-Agent 的,后来没有成功,所以后来在尝试 selenium 时,把这个注意的点忽略了。
我在开启 headless 后,同样也关闭了 sandbox ,手动配置了一下 User-Agent 就解决了。
下面是我的代码

options = webdriver.ChromeOptions()
options.add_argument('--headless')
options.add_argument('--disable-gpu')
options.add_argument('--no-sandbox')
options.add_argument('lang=zh-CN.UTF-8')
options.add_argument(f'user-agent={settings.USER_AGENT}')
prefs = {
    'profile.managed_default_content_settings.images': 2,
    'profile.managed_default_content_settings.notifications': 2,
    'intl.accept_languages': 'zh-CN,zh;q=0.9,en;q=0.5',
}
options.add_experimental_option('prefs', prefs)
driver = webdriver.Chrome(chrome_options=options)

如果这种方式还是没有解决,还有一种方式可以尝试,那就是使用 mitmproxy 或者 charles ,在 selenium 请求时加上一层代理,我在本地可以调通,但是我还没有在 linux 上尝试 。

推荐阅读

How does reCAPTCHA 3 know I'm using Selenium/chromedriver?

Way to change Google Chrome user agent in Selenium?

文章来源:https://www.cnblogs.com/embraceU/p/14783247.html

后台-系统设置-扩展变量-手机广告位-内容正文底部
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。
本文地址:https://www.jcdi.cn/pythonjc/30701.html

留言与评论(共有 0 条评论)
   
验证码:
后台-系统设置-扩展变量-手机广告位-评论底部广告位

教程弟

https://www.jcdi.cn/

统计代码 | 京ICP1234567-2号

Powered By 教程弟 教程弟

使用手机软件扫描微信二维码