Selenium无头模式容易遇到的坑

在无头模式下,我们看不到浏览器的操作,但是selenium无头模式的浏览器向服务器发送的请求头和正常模式下还是有点区别的,这就导致了一些网站会检测到我们是用selenium来访问的,从而导致一些问题

下面就是我在使用selenium无头模式时遇到的一些问题,以及解决方案

1.user-agent过短

selenium默认的user-agent比较短,这就可能会让部分网站检测出我们使用了selenium,增加了这一特征点被检测出来的概率。我们可以修改user-agent来解决这个问题

在selenium的options中添加如下代码即可:

user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 S```afari/537.36'
  options.add_argument(f'user-agent={user_agent}')

2.设置浏览器分辨率

selenium无头模式下的浏览器分辨率默认是800*600,这个分辨率太小了,很容易被检测出来,我们可以设置一个大一点的分辨率来解决这个问题

 option = webdriver.ChromeOptions()
  option.add_argument('--headless')
  options.add_argument("--window-size=1920,1080")
  browser = webdriver.Chrome(chrome_options=option)
  browser.set_window_size(1920, 1080)

3.禁用GPU加速

selenium无头模式下的浏览器默认是开启GPU加速的,我们可以禁用GPU加速来解决这个问题,GPU加速会让浏览器的性能更好,但是会增加一些特征点,从而被检测出来

 #谷歌文档提到需要加上这个属性来规避bug
  chrome_options.add_argument("--disable-gpu")

4.js检测webdriver

有些网站会通过js来检测是否使用了selenium,在启用selenium后js读取window.navigator.webdriver参数返回值为true,这样就可以检测出我们使用了selenium

反检测代码如下:

 option.add_argument('--headless')
  # 关闭浏览器上部提示语:Chrome正在受到自动软件的控制(改修js特征)
  options.add_experimental_option('excludeSwitches', ['enable-automation'])
  options.add_experimental_option('useAutomationExtension', False)
  browser = webdriver.Chrome(chrome_options=option)
  browser.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
    "source": """
      Object.defineProperty(navigator, 'webdriver', {
        get: () => undefined
      })
    """
  })

最终代码

 from selenium import webdriver
  from selenium.webdriver.chrome.options import Options
  option = webdriver.ChromeOptions()
  option.add_argument('--headless')
  # 关闭浏览器上部提示语:Chrome正在受到自动软件的控制
  options.add_experimental_option('excludeSwitches', ['enable-automation'])
  options.add_experimental_option('useAutomationExtension', False)
  option.add_argument("--window-size=1920,1080") # 设置浏览器分辨率(窗口大小)
  option.add_argument("--disable-gpu") # 禁用GPU加速
  options.add_argument("blink-settings=imagesEnabled=false") # 不加载图片, 提升速度
  options.add_argument('--no-sandbox') # 解决DevToolsActivePort文件不存在的报错
  option.add_argument('--hide-scrollbars')  # 隐藏滚动条, 应对一些特殊页面
  # 设置user-agent
  user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36'
  options.add_argument(f'user-agent={user_agent}')
  browser = webdriver.Chrome(chrome_options=option)
  browser.set_window_size(1920, 1080)
  # 关闭浏览器上部提示语:Chrome正在受到自动软件的控制
  browser.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
    "source": """
      Object.defineProperty(navigator, 'webdriver', {
        get: () => undefined
      })
    """
  })

使用以上代码初始化selenium后,应该可以规避挺大一部分网站对爬虫的检测了,但是也不是万能的,有些网站可能还是会检测出来,这时候就需要我们自己去分析网站的检测方式,然后针对性的去解决了

希望各位能遵守爬虫规则,不要去爬取一些不应该爬取的网站,多多遵守robots协议,不要给爬虫带来不好的影响。

​现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:485187702【暗号:csdn11】

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走! 希望能帮助到你!【100%无套路免费领取】

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值