gpt4 book ai didi

selenium - 是否存在无法检测到的Selenium WebDriver版本?

转载 作者:行者123 更新时间:2023-12-03 14:34:28 57 4
gpt4 key购买 nike

我正在住宅代理网络后面的Ubuntu服务器上的Selenium上运行Chrome驱动程序。但是,我的 Selenium 被检测到了。有没有办法使Chrome驱动程序和Selenium 100%无法检测?
我已经尝试了很久了,但是我却忘记了我所做的许多事情,包括:

  • 尝试使用不同版本的Chrome
  • 添加多个标志并从Chrome驱动程序文件中删除一些单词。
  • 使用隐身模式在代理(也包括住宅)后面运行它。
  • 加载配置文件。
  • 鼠标的随机移动。
  • 随机化所有内容。

  • 我正在寻找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)

    最佳答案

    Selenium 驱动的WebDriver被检测到的事实并不取决于任何特定的Selenium,Chrome或ChromeDriver版本。网站本身可以检测网络流量,并可以标识浏览器客户端(即,由WebDriver控制的Web浏览器)。

    但是,一些避免在网络抓取时被检测到的通用方法如下:

  • 网站可以通过您的显示器大小来确定您的脚本/程序的首要属性。因此,建议使用而不是来使用常规的Viewport
  • 如果您需要向网站发送多个请求,则需要继续更改每个请求的。您可以在Way to change Google Chrome user agent in Selenium?
  • 中找到详细的讨论
  • 要模拟类似人类的行为,您可能需要降低脚本的执行速度,甚至超出WebDriverWaitexpected_conditions诱导time.sleep(secs)的范围。在这里您可以找到有关How to sleep webdriver in python for milliseconds
  • 的详细讨论

    @Antoine Vastel在他的博客网站 Detecting Chrome Headless中提到了几种方法,这些方法将Chrome浏览器与 headless Chrome浏览器区分开。
  • 用户代理:用户代理属性通常用于检测用户的操作系统和浏览器。在Chrome版本59中,它具有以下值:
    Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/59.0.3071.115 Safari/537.36
  • 可以通过以下方法检查是否存在 headless Chrome:
    if (/HeadlessChrome/.test(window.navigator.userAgent)) {
    console.log("Chrome headless detected");
    }
  • 插件: navigator.plugins 返回浏览器中存在的一系列插件。通常,在Chrome上,我们会找到默认插件,例如Chrome PDF viewerGoogle Native Client。相反,在 headless 模式下,返回的数组包含而不是插件。
  • 可以通过以下方法检查是否存在插件:
    if(navigator.plugins.length == 0) {
    console.log("It may be Chrome headless");
    }
  • 语言:在Chrome中,两个Javascript属性可用于获取 user: navigator.language navigator.languages 使用的语言。第一个是浏览器用户界面的语言,第二个是代表用户首选语言的字符串数组。但是,在 headless 模式下,navigator.languages返回一个字符串。
  • 通过以下方法可以检查语言是否存在:
    if(navigator.languages == "") {
    console.log("Chrome headless detected");
    }
  • WebGL:WebGL是用于在HTML Canvas 中执行3D渲染的API。使用此API,可以查询图形驱动程序的供应商以及图形驱动程序的渲染器。使用普通的Chrome和Linux,我们可以获得渲染器和供应商的以下值:Google SwiftShaderGoogle Inc.。在 headless 模式下,我们可以获得Mesa OffScreen(这是用于渲染的技术,而无需使用任何类型的窗口系统)和Brian Paul(这是启动开源Mesa图形库的程序)。
  • 可以通过以下方法检查WebGL的存在:
    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");
    }
  • 并非所有的 headless Chrome都具有相同的供应商和渲染器值。其他保留的值也可以在非 headless 版本中找到。但是,Mesa OffscreenBrian Paul指示 headless 版本的存在。
  • 浏览器功能:Modernizr库可以测试浏览器中是否存在各种HTML和CSS功能。我们发现Chrome与 headless Chrome之间的唯一区别是后者没有发际线功能,该功能检测到对hidpi/retina hairlines的支持。
  • 可通过以下方法检查发际线功能的存在:
    if(!Modernizr["hairline"]) {
    console.log("It may be Chrome headless");
    }
  • 丢失的图像:我们列表中的最后一个似乎也是最可靠的,它来自于Chrome无法使用的图像尺寸,以防无法加载图像。在使用普通Chrome浏览器的情况下,图像的宽度和高度取决于浏览器的缩放比例,但不等于零。在 headless 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");
    }
    }


  • 引用

    您可以在以下位置找到几个类似的讨论:
  • How to bypass Google captcha with Selenium and python?
  • How to make Selenium script undetectable using GeckoDriver and Firefox through Python?


  • tl;博士
  • Selenium webdriver: Modifying navigator.webdriver flag to prevent selenium detection
  • How does recaptcha 3 know I'm using selenium/chromedriver?
  • Selenium and non-headless browser keeps asking for Captcha
  • 关于selenium - 是否存在无法检测到的Selenium WebDriver版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56528631/

    57 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com