0.undetected_chromdriver是什么?
网络爬虫和网络自动化在许多数据分析和网络开发工作中扮演着重要角色。在这些工作中,最广泛使用的工具之一是Selenium和Chromedriver。
Selenium最初是为了自动化测试网络应用程序而创建的工具,但由于其功能和通用性,被数据分析师和网络开发人员广泛用作网络爬虫工具。
Chromedriver是Selenium框架中用于控制Google Chrome浏览器的WebDriver。通过这种方式,开发人员可以运行自动化测试脚本来浏览网站,或者自动执行用户行为(如点击、滚动等)。
然而,如果使用这些基本工具来爬取网站,大多数现代网站都具有检测和阻止这种自动化访问的安全机制。例如,当试图爬取安全性较高的网站时,通过Selenium和chrome driver进行爬取时,网站会将这些操作视为机器人并进行检测和阻止。在这种情况下,就需要undetected_chromedriver。
undetected_chromedriver是一个Python库,与普通的Chromedriver不同,它可以避免检测和阻止网站自动化。换句话说,它可以使爬虫脚本运行时看起来像真实用户一样。
通过这种方式,可以更稳定、高效地收集网站提供的数据。undetected_chromedriver使熟悉Selenium和Chromedriver的开发人员能够绕过这些检测机制,而无需额外的关于网络爬虫安全性的知识。
因此,undetected_chromedriver是一种帮助简化和提高网络爬虫工作效率的工具。
1.安装和使用方法
pip install undetected-chromedriver
进行安装。
import undetected_chromedriver as uc
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from fake_useragent import UserAgent
from selenium_stealth import stealth
from selenium.webdriver.chrome.service import Service
options = uc.ChromeOptions()
- 各种选项
options = uc.ChromeOptions用于创建可以放置选项的对象。
# 팝업 차단을 활성화합니다.
options.add_argument('--disable-popup-blocking')
# WebDriver 객체 생성
driver = uc.Chrome( options = options,enable_cdp_events=True,incognito=True)
# selenium_stealth 설정
stealth(driver,
vendor="Google Inc. ",
platform="Win32",
webgl_vendor="intel Inc. ",
renderer= "Intel Iris OpenGL Engine",
fix_hairline=True,
)
options.add_argument('--remote-debugging-port=9222')
# 웹사이트 방문
# driver.get('[원하는 웹사이트 방문]')
# 대기 시간 설정 => 대기 시간을 설정하여, html이 렌더링 되는 시간을 벌어줍니다.
driver.implicitly_wait(2)
# 자바스크립트 코드 실행
driver.execute_script("Object.defineProperty(navigator, 'plugins', {get: function() {return[1, 2, 3, 4, 5];},});")
使用fake_useragent,每次运行时使用不同的用户代理字符串是一个好方法。这样可以更改通常用于识别浏览器的信息。
使用selenium_stealth可以掩盖一些网站用于检测网络爬虫的特征。
使用driver.execute_script()来执行JavaScript代码,重写navigator.plugins属性的方法。这样可以阻止网站检测爬虫的另一种方法。
使用driver.delete_all_cookies()来删除所有cookie有助于防止网站跟踪先前的访问。
通过使用各种选项,可以使undetected chromedriver正常工作。
try:
driver.find_elements(By.XPATH, "//div[@class='lister__item__inner']/a")[8].click()
driver.implicitly_wait(2)
driver.delete_all_cookies()
driver.execute_script("Object.defineProperty(navigator, 'plugins', {get: function() {return[1, 2, 3, 4, 5];},});")
except:
print("치단당함")
像以前使用chromedriver和selenium的方式一样将代码放入。
2.ChromeDriver和undetected_chromedriver的主要区别
1) 增强功能:undetected_chromedriver相对于普通ChromeDriver具有更强大的反机器人检查功能。这是为了避免一些网站为阻止自动化行为(例如网络爬虫)而使用的防御机制。
2) 隐身模式:undetected_chromedriver引入了一些额外技术,以更好地隐藏使用Selenium的自动化行为。其中包括删除navigator.webdriver标志、设置WebGL供应商、设置语言插件顺序、设置分辨率等。简单来说,可以认为是给chromedriver加了全套选项。
3) 响应速度:一些用户发现undetected_chromedriver比传统ChromeDriver更快、更响应。这取决于网站,不是所有网站都适用。
3.结论
由于网站不断开发和应用新的防御机制,因此需要持续研究和方法来避开最新的防御技术。
也一起阅读:
数据收集,现在自动化
无需编码,5分钟开始·5000多个网站爬取经验




