当前位置:   article > 正文

Python使用Selenium库如何绕过Cloudflare验证,网页请确认你是不是机器人_selenium cloudflare

selenium cloudflare

大家好,我是淘小白~

前段时间使用selenium库写chatGPT的脚本,遇到过一个问题,那就是cloudflare的机器验证,让你点击确认不是机器人,这个问题最后找人解决掉了,我也是百度了很久没找到答案,B站找到的一个UP主,只要报名人家的课程才会给方法,所以,下面就把这个问题怎么解决来说明一下!

1、被检测到的原因

网站检测到了网页是selenium驱动起来的,并且包含一些特定的特征导致的机器验证。

2、网上查找方法

我查了两天的资料,最后发现所有的资料都指向一个库Undetected-chromedriver

下面是一位博主给的解决办法: 

  1. # Cloudflare和很多其他网站一样会检测访问是否为Selenium bot,其中一项为检测Selenium运行时出现的特有js变量。
  2. # 这里主要包括了是否含有"selenium"/ "webdriver"的变量或者含有"$cdc_"/"$wdc_"的文件变量。
  3. # 每个driver的检测机制会不一样,此处给出的方案基于chromedriver。
  4. # 1. Undetected-chromedriver
  5. # 非常简单好用的包,直接pip安装,如下初始化driver即可,之后就像正常Selenium使用即可。
  6. import undetected_chromedriver as uc
  7. driver = uc.Chrome()
  8. driver.get('https://nowsecure.nl')
  9. # 2. 直接修改chromedriver executable
  10. # 将key变量修改成任意不含"cdc"的字符。
  11. /**
  12. * Returns the global object cache for the page.
  13. * @param {Document=} opt_doc The document whose cache to retrieve. Defaults to
  14. * the current document.
  15. * @return {!Cache} The page's object cache.
  16. */
  17. function getPageCache(opt_doc, opt_w3c) {
  18. var doc = opt_doc || document;
  19. var w3c = opt_w3c || false;
  20. // |key| is a long random string, unlikely to conflict with anything else.
  21. var key = '$cdc_asdjflasutopfhvcZLmcfl_';
  22. if (w3c) {
  23. if (!(key in doc))
  24. doc[key] = new CacheWithUUID();
  25. return doc[key];
  26. } else {
  27. if (!(key in doc))
  28. doc[key] = new Cache();
  29. return doc[key];
  30. }
  31. }
  32. # 这两种本质上没有太大的区别,undetected-chromedriver本质上是给chromedriver启动时打上了一个补丁,完成了修改key的那一步
  33. def patch_exe(self):
  34. """
  35. Patches the ChromeDriver binary
  36. :return: False on failure, binary name on success
  37. """
  38. logger.info("patching driver executable %s" % self.executable_path)
  39. linect = 0
  40. replacement = self.gen_random_cdc() #此处修改了cdc的名称
  41. with io.open(self.executable_path, "r+b") as fh:
  42. for line in iter(lambda: fh.readline(), b""):
  43. if b"cdc_" in line:
  44. fh.seek(-len(line), 1)
  45. newline = re.sub(b"cdc_.{22}", replacement, line)
  46. fh.write(newline)
  47. linect += 1
  48. return linect

这个库我自己测试了很久,都是有报错的问题存在,看github上面的讨论区,也没有多少有质量的讨论,大部分还是没有解决这个问题。

3、需要具备条件

3.1谷歌浏览器117或者116版本的,最新版的118的不行

3.2 下载谷歌浏览器对应版本的驱动

3.3下载我提供的 undetected_chromedriver.exe,放在Python代码的目录下面

下载链接会附在文章末尾!

注意:把自己的谷歌浏览器卸载掉,然后,驱动下载下来,放到python安装目录的根目录下面,还有就是百度一下,把谷歌浏览器的自动更新给禁止掉。安装好我提供的谷歌浏览器之后,就可以开始测试了,禁止更新,后面可以自己搞一下。

4、增加下面代码

  1. chrome_options.add_argument('--disable-infobars')
  2. chrome_options.add_argument('--disable-blink-features=AutomationControlled')
  3. chrome_options.add_argument("user-data-dir={}".format(user_data_dir))
  4. driver = Chrome(service=Service('./undetected_chromedriver.exe'), options=chrome_options)

user_data_dir 我直接调用的谷歌浏览器的本地数据,使用这个方法,就可以用登录自己账号了,淡然,也可以删除掉这个,提取方法:谷歌浏览器搜索框,chrome://version/    回车

注意斜杠转义一下。

5、总结

修改完自己的代码之后,在测试一下,就可以绕过cloudflare的验证了,而且很稳定 ,对于里面的代码什么意思,大家可以自己查找一下,不做解释了。

6、资料下载地址

资料下载地址:下载地址 提取码:n6jl 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/599731
推荐阅读
相关标签
  

闽ICP备14008679号