python+selenium如何规避浏览器验证码等检测?

发表于:2023-10-30 09:59

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:佚名    来源:知乎

  我们在做浏览器自动化登录或者已经登录后再进行自动化的时候,很多时候都会碰到智能验证环节,如下图的点击按钮智能验证。
  也有可能是向左滑动的智能验证等等,那么怎么绕过这个环节呢,其中一种方法可以在你的代码中加一小段代码即可解决
  # 创建一个浏览器对象
  driver = webdriver.Chrome()
   driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
      "source": """
          Object.defineProperty(navigator, 'webdriver', {
            get: () => undefined
          }) 
       """}) 
  当前也可以通过设置无头浏览器,设置一些浏览器参数,禁用一些图片、js加载来防止弹出验证码。
  from selenium import webdriver
  options = webdriver.ChromeOptions()
  options.add_argument('--disable-gpu')
  options.add_argument('--disable-extensions')
  options.add_argument('--disable-infobars')
  options.add_argument('--disable-dev-shm-usage')
  options.add_argument('--no-sandbox')
  options.add_argument('--disable-popup-blocking')
  options.add_argument('--disable-default-apps')
  options.add_argument('--disable-translate')
  options.add_argument('--disable-web-security')
  options.add_argument('--disable-features=IsolateOrigins,site-per-process')
  options.add_argument('--blink-settings=imagesEnabled=false')
  options.add_argument('--disable-javascript')
  driver = webdriver.Chrome(chrome_options=options)
  还可以尝试登录前删除Cookie。
  如果网站使用Cookie来识别用户并显示验证码,您可以尝试在每次登录之前删除Cookie。这将模拟每次新用户登录网站的情况,从而避免验证码。
  driver.delete_all_cookies()
  也可以使用代理IP
  有些网站会通过IP地址来识别用户并显示验证码。您可以尝试使用代理IP来避免这种情况。
  例如,以下代码将使用代理IP启动Chrome浏览器:
  from selenium import webdriver
  options = webdriver.ChromeOptions()options.add_argument('--proxy-server=http://your-proxy-ip:your-proxy-port')
  driver = webdriver.Chrome(chrome_options=options)
  总之,在使用Selenium登录网站时,您可以尝试上述方法来避免验证码登录。但是,请注意,如果网站具有强大的反爬虫保护机制,这些方法可能无法奏效。
  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号