最近闲来无事,想着学习一下放弃了10多年的程序。
目标 爬取小红书相关信息
遇到了 各种问题
1.selenium所需要 chorme的版本与chorme driver的版本需要一致,在这个过程中下了老版本的chorme结果每次启动都是自动更新,结果只能唤醒浏览器一次就更新掉了,解决方案,安装的时候断网,然后进入计算机管理里面,关闭了chorme的自动更新后,在联网。OK 问题解决
2.小红书反爬虫机制在这个过程中,发现了是selenium的特征被查出来了,因此到处搜索原因,找到如下文章的内容
1、修改navigator.webdriver标志:navigator.webdriver是一个浏览器提供的属性,用于表示浏览器是否由webdriver控制。默认情况下,如果浏览器由Selenium驱动,这个标志的值为true,否则为false。我们可以通过execute_cdp_cmd命令来执行Google Chrome DevTools命令,从而修改这个标志的值为false或者undefined,以隐藏Selenium的特征。
browser.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument",{"source":"Object.defineProperty(navigator,‘webdriver’,{get:()=>undefined})"})
只进行到这步的话,启动小红书界面,还是出现了error 403 ,还是被检索出来了。
2、改变user-agent:user-agent是一个浏览器发送给网站的字符串,用于表示浏览器的类型和版本。有些网站会根据user-agent来判断用户的设备和操作系统,如果发现user-agent不符合正常的范围,就会怀疑是Selenium驱动的浏览器。我们可以通过execute_cdp_cmd命令来设置Network.setUserAgentOverride参数,从而改变user-agent为任意我们想要的值,以隐藏Selenium的特征。
user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"
browser.execute_cdp_cmd("Network.setUserAgentOverride", {"userAgent": user_agent})
结合了 1 2,两个都设置后还是不行,脑阔疼,现在开始进行网络上找到的,第三项也处理下。
3、排除或关闭一些Selenium相关的开关:enable-automation和useAutomationExtension是两个常见的Selenium相关开关,它们会影响浏览器的行为和外观,比如在浏览器窗口上显示“Chrome正在受到自动软件的控制”的提示。我们可以通过Chrome选项来添加或删除这些开关,从而让浏览器看起来更像正常的浏览器,以隐藏Selenium的特征。原作者中加入了很多代码,后面我逐一注释 发现只用第一个即可绕过 小红书目标的检测,现在不报错了
options = webdriver.ChromeOptions()
options.add_argument('--disable-blink-features=AutomationControlled')
# options.add_argument('--disable-extensions')
# options.add_argument('--disable-gpu')
# options.add_argument('--disable-infobars')
# options.add_argument('--disable-notifications')
# options.add_argument('--disable-popup-blocking')
# options.add_argument('--disable-web-security')
# options.add_argument('--ignore-certificate-errors')
# options.add_argument('--no-sandbox')
# options.add_argument('--start-maximized')
# options.add_argument('--user-data-dir=/dev/null')
# options.add_argument('--proxy-server={}'.format(proxy_address + ':' + proxy_port))
# options.add_argument('--proxy-auth={}:{}'.format(proxy_username, proxy_password))
感谢平台提供的学习环境,以及作者的努力查找!下面有原作者的文章。
特此记录,学习中。
————————————————
版权声明:本文为CSDN博主「测试界的飘柔」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m0_67695717/article/details/130687622