我在ubuntu服务器上的selenium上运行chrome驱动程序。在住宅代理网络的背后。但是我的selenium被查出了。有没有一种方法可以使铬驱动剂和selenium100%无法检测到?
我已经尝试了很久了,但是我却忘记了我所做的许多事情,包括:
我正在寻找100%无法检测到的selenium的真实版本。(如果曾经存在)或机器人跟踪器无法检测到的另一种自动化方式。
这是浏览器启动的一部分
sx = random.randint(1000,1500) sn = random.randint(3000,4500) display = Display(visible=0, size=(sx,sn)) display.start() randagent = random.randint(0,len(useragents_desktop)-1) uag = useragents_desktop[randagent] #this is to prevent ip leaking preferences = "webrtc.ip_handling_policy" : "disable_non_proxied_udp", "webrtc.multiple_routes_enabled": False, "webrtc.nonproxied_udp_enabled" : False chrome_options.add_experimental_option("prefs", preferences) chrome_options.add_argument("--disable-dev-shm-usage") chrome_options.add_argument("--no-sandbox") chrome_options.add_argument("--disable-impl-side-painting") chrome_options.add_argument("--disable-setuid-sandbox") chrome_options.add_argument("--disable-seccomp-filter-sandbox") chrome_options.add_argument("--disable-breakpad") chrome_options.add_argument("--disable-client-side-phishing-detection") chrome_options.add_argument("--disable-cast") chrome_options.add_argument("--disable-cast-streaming-hw-encoding") chrome_options.add_argument("--disable-cloud-import") chrome_options.add_argument("--disable-popup-blocking") chrome_options.add_argument("--ignore-certificate-errors") chrome_options.add_argument("--disable-session-crashed-bubble") chrome_options.add_argument("--disable-ipv6") chrome_options.add_argument("--allow-http-screen-capture") chrome_options.add_argument("--start-maximized") wsize = "--window-size=" + str(sx-10) + ',' + str(sn-10) chrome_options.add_argument(str(wsize) ) prefs = {"profile.managed_default_content_settings.images": 2} chrome_options.add_experimental_option("prefs", prefs) chrome_options.add_argument("blink-settings=imagesEnabled=true") chrome_options.add_argument("start-maximized") chrome_options.add_argument("user-agent="+uag) chrome_options.add_extension(pluginfile)#this is for the residential proxy driver = webdriver.Chrome(executable_path="/usr/bin/chromedriver", chrome_options=chrome_options)
是否 检测到硒驱动的WebDriver 并不 取决于任何特定的 Selenium , Chrome 或 ChromeDriver 版本。该 网站 本身可以检测网络流量,并可以识别 浏览器客户端 ,即 Web浏览器 作为 的webdriver controled 。
但是,一些避免在网络抓取过程中被检测到的通用方法如下:
time.sleep(secs)
@Antoine Vastel在其博客网站“检测无头的Chrome”中提到了几种方法,这些方法将 Chrome 浏览器与 无头的 Chrome 浏览器区分开。
Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/59.0.3071.115 Safari/537.36
* 可以通过以下方法检查是否存在 _无头Chrome_ :
if (/HeadlessChrome/.test(window.navigator.userAgent)) { console.log("Chrome headless detected"); }
插件 : navigator.plugins返回浏览器中存在的一系列插件。通常,在Chrome上我们会找到默认插件,例如Chrome PDF viewer或Google Native Client。相反,在无头模式下,返回的数组 不 包含插件。
navigator.plugins
Chrome PDF viewer
Google Native Client
if(navigator.plugins.length == 0) { console.log("It may be Chrome headless");
}
语言 :在Chrome中两个JavaScript属性使获得由所使用的语言 user: navigator.language 和 navigator.languages 。第一个是浏览器UI的语言,而第二个是代表用户首选语言的字符串数组。但是,在无头模式下,navigator.languages将返回一个 空 字符串。
user: navigator.language
navigator.languages
if(navigator.languages == "") { console.log("Chrome headless detected"); }
WebGL :WebGL是用于在HTML画布中执行3D渲染的API。使用此API,可以查询图形驱动程序的供应商以及图形驱动程序的渲染器。使用普通的Chrome和Linux,我们可以获得渲染器和供应商的以下值:Google SwiftShader和Google Inc.。在无头模式下,我们可以获得Mesa OffScreen,它是不使用任何类型的窗口系统进行渲染的技术Brian Paul,并且是启动开源Mesa图形库的程序。
Google SwiftShader
Google Inc.
Mesa OffScreen
Brian Paul
var canvas = document.createElement('canvas'); var gl = canvas.getContext('webgl'); var debugInfo = gl.getExtension('WEBGL_debug_renderer_info'); var vendor = gl.getParameter(debugInfo.UNMASKED_VENDOR_WEBGL); var renderer = gl.getParameter(debugInfo.UNMASKED_RENDERER_WEBGL); if(vendor == "Brian Paul" && renderer == "Mesa OffScreen") { console.log("Chrome headless detected"); }
* 并非所有的无头Chrome都具有相同的供应商和渲染器值。其他人保留的值也可以在非无头版本中找到。然而,`Mesa Offscreen`与`Brian Paul`指示的无头版本的存在。
浏览器功能 :Modernizr库可以测试浏览器中是否存在各种HTML和CSS功能。我们发现Chrome与无头Chrome之间的唯一区别是后者没有发际线功能,该功能检测到对的支持hidpi/retina hairlines。
hidpi/retina hairlines
if(!Modernizr["hairline"]) { console.log("It may be Chrome headless"); }
图片丢失 :我们列表中的最后一个看上去也最坚固,这是由于Chrome无法使用而无法加载的图片尺寸。在使用普通Chrome浏览器的情况下,图像的宽度和高度取决于浏览器的缩放比例,但不为零。在无头Chrome中,图片的宽度和高度等于零。
var body = document.getElementsByTagName("body")[0]; var image = document.createElement("img"); image.src = "http://iloveponeydotcom32188.jg"; image.setAttribute("id", "fakeimage"); body.appendChild(image); image.onerror = function(){ if(image.width == 0 && image.height == 0) { console.log("Chrome headless detected"); } }