Giter Club home page Giter Club logo

detect-headless's Introduction

Espaço da Infosimples

Este repositório de GitHub é um espaço dedicado a criadores de soluções de automação que usam a Infosimples.

Na área Issues você pode acompanhar tudo que será desenvolvido pela Infosimples (filtre por status: confirmed para ver no que estamos trabalhando agora).

Em nosso Histórico de mudanças você encontra um registro com todas as mudanças significativas feitas na API da Infosimples.

Sobre a Infosimples

A Infosimples é uma empresa que disponibiliza centenas de APIs para automação de consultas em sites públicos.

Caso prefira fazer contato de forma particular, basta enviar uma mensagem para [email protected].

detect-headless's People

Contributors

barbolo avatar bobberr avatar cezar-lima avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

detect-headless's Issues

How can I bypass Plugins Prototype

Isn't there a standard answer to this question?
I passed almost all the tests.
But Plugins Prototype Test is an exception.
Could you please help me?

const puppeteer = require('puppeteer');

async function test() {
    var browser = await puppeteer.launch({
        ignoreDefaultArgs: ['--enable-automation'],
    });
    var page = await pageInit(browser);
    // var page = await browser.newPage();
    page.on('dialog', async (age) => {
        console.log(age.type());
        await page.waitFor(3e2);
        console.log(age.message());
        await age.dismiss()
    });
    await page.goto('https://infosimples.github.io/detect-headless/');
    await page.waitFor(3e2);
    await page.mouse.move(50, 50, { steps: 50 });
    await page.screenshot({
        path: './' + Date.now() + '.png',
        fullPage: true,
    });
    // await browser.close();
    console.log('end');

}
async function pageInit(browser) {
    var page, pages = await browser.pages();
    if (pages.length > 0) {
        page = pages[0];
    } else {
        page = await browser.newPage();
    }
    await page.setExtraHTTPHeaders({
        'Accept-Language': 'zh-CN,zh;q=0.9'
    });

    //User-Agent Test
    await page.setUserAgent('Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36');
    await page.evaluateOnNewDocument(() => {
        //Webdriver Test
        Object.defineProperty(navigator, 'webdriver', {
            get: () => false,
        });
        //connection.rtt Test
        Object.defineProperty(navigator.connection, 'rtt', {
            get: () => 50,
        });
        //Plugins Length Test
        Object.defineProperty(navigator, 'plugins', {
            get: () => {
                var ChromiumPDFPlugin = {};
                ChromiumPDFPlugin.__proto__ = PluginArray.prototype;
                return [ChromiumPDFPlugin];
            },
        });
    });

    //Chrome Test
    const trueChromeObject = { "app": { "isInstalled": false }, "webstore": { "onInstallStageChanged": {}, "onDownloadProgress": {} }, "runtime": { "PlatformOs": { "MAC": "mac", "WIN": "win", "ANDROID": "android", "CROS": "cros", "LINUX": "linux", "OPENBSD": "openbsd" }, "PlatformArch": { "ARM": "arm", "X86_32": "x86-32", "X86_64": "x86-64" }, "PlatformNaclArch": { "ARM": "arm", "X86_32": "x86-32", "X86_64": "x86-64" }, "RequestUpdateCheckStatus": { "THROTTLED": "throttled", "NO_UPDATE": "no_update", "UPDATE_AVAILABLE": "update_available" }, "OnInstalledReason": { "INSTALL": "install", "UPDATE": "update", "CHROME_UPDATE": "chrome_update", "SHARED_MODULE_UPDATE": "shared_module_update" }, "OnRestartRequiredReason": { "APP_UPDATE": "app_update", "OS_UPDATE": "os_update", "PERIODIC": "periodic" } } };
    await page.evaluateOnNewDocument(() => {
        chrome = { "app": { "isInstalled": false }, "webstore": { "onInstallStageChanged": {}, "onDownloadProgress": {} }, "runtime": { "PlatformOs": { "MAC": "mac", "WIN": "win", "ANDROID": "android", "CROS": "cros", "LINUX": "linux", "OPENBSD": "openbsd" }, "PlatformArch": { "ARM": "arm", "X86_32": "x86-32", "X86_64": "x86-64" }, "PlatformNaclArch": { "ARM": "arm", "X86_32": "x86-32", "X86_64": "x86-64" }, "RequestUpdateCheckStatus": { "THROTTLED": "throttled", "NO_UPDATE": "no_update", "UPDATE_AVAILABLE": "update_available" }, "OnInstalledReason": { "INSTALL": "install", "UPDATE": "update", "CHROME_UPDATE": "chrome_update", "SHARED_MODULE_UPDATE": "shared_module_update" }, "OnRestartRequiredReason": { "APP_UPDATE": "app_update", "OS_UPDATE": "os_update", "PERIODIC": "periodic" } } };
        window.chrome = { "app": { "isInstalled": false }, "webstore": { "onInstallStageChanged": {}, "onDownloadProgress": {} }, "runtime": { "PlatformOs": { "MAC": "mac", "WIN": "win", "ANDROID": "android", "CROS": "cros", "LINUX": "linux", "OPENBSD": "openbsd" }, "PlatformArch": { "ARM": "arm", "X86_32": "x86-32", "X86_64": "x86-64" }, "PlatformNaclArch": { "ARM": "arm", "X86_32": "x86-32", "X86_64": "x86-64" }, "RequestUpdateCheckStatus": { "THROTTLED": "throttled", "NO_UPDATE": "no_update", "UPDATE_AVAILABLE": "update_available" }, "OnInstalledReason": { "INSTALL": "install", "UPDATE": "update", "CHROME_UPDATE": "chrome_update", "SHARED_MODULE_UPDATE": "shared_module_update" }, "OnRestartRequiredReason": { "APP_UPDATE": "app_update", "OS_UPDATE": "os_update", "PERIODIC": "periodic" } } };
        window.navigator.chrome = { "app": { "isInstalled": false }, "webstore": { "onInstallStageChanged": {}, "onDownloadProgress": {} }, "runtime": { "PlatformOs": { "MAC": "mac", "WIN": "win", "ANDROID": "android", "CROS": "cros", "LINUX": "linux", "OPENBSD": "openbsd" }, "PlatformArch": { "ARM": "arm", "X86_32": "x86-32", "X86_64": "x86-64" }, "PlatformNaclArch": { "ARM": "arm", "X86_32": "x86-32", "X86_64": "x86-64" }, "RequestUpdateCheckStatus": { "THROTTLED": "throttled", "NO_UPDATE": "no_update", "UPDATE_AVAILABLE": "update_available" }, "OnInstalledReason": { "INSTALL": "install", "UPDATE": "update", "CHROME_UPDATE": "chrome_update", "SHARED_MODULE_UPDATE": "shared_module_update" }, "OnRestartRequiredReason": { "APP_UPDATE": "app_update", "OS_UPDATE": "os_update", "PERIODIC": "periodic" } } };
    });

    //Permissions Test
    await page.evaluateOnNewDocument(() => {
        const originalQuery = window.navigator.permissions.query;
        return window.navigator.permissions.query = (parameters) => (
            parameters.name === 'notifications' ? Promise.resolve({ state: Notification.permission }) :
                originalQuery(parameters)
        );
    });

    //Languages Test
    await page.evaluateOnNewDocument(() => {
        Object.defineProperty(navigator, 'languages', {
            get: () => ['zh-CN'],
        });
    });
    return page;
}
test();

Does the rule: navigator.connection.rtt == 0 possibly cause false positives for some cases like Edge?

We have observed that 2%-3% Edge traffic that has navigator.connection.rtt set to 0. It's much higher than other headless signals. So I wonder if there can possibly be any false positives for the rule: navigator.connection.rtt == 0 on Edge browsers?

Actually I searched around the Internet, but didn't find a strong evidence to prove that navigator.connection.rtt == 0 indicates a headless bot, except here. Any answers would be appreciated. Thanks!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.