Raspar dados do banco é ilegal?

Alguém já tentou fazer algum tipo de raspagem de dados em algum banco? Sabem informar se esse processo é legal ou não?

Banco que eu digo são os financeiros, como: Bradesco, Itau, Banco do Brasil…

Pergunta interessante, você diz no âmbito da lei?

Isso! Eu consegui fazer um processo e tá ficando bem legal, mas me bateu uma dúvida, porquê por incrível que pareça eu não acho nada sobre, principalmente no site do banco

Eu acredito que não tenha problema, pois se os dados são expostos, o entendimento que temos é que os mesmos são públicos, realmente não existe muita documentação a respeito, para ir mais a fundo teria que estabelecer um contato com o departamento jurídico de cada banco para uma resposta mais concreta.

O que eu tenho até o momento é o acesso a minha conta, pretendo fazer algo semelhante ao GuiaBolso, que seria ler o meu extrato e mostrar os meus gastos…

Realmente, valeu pela força!

Esse acesso será só para você, para um único cliente (ex: como um módulo dentro de um sistema) ou você pretende criar algo a partir do qual qualquer pessoa pode colocar seus dados (usuário, conta, senha digital e etc) e obter esses dados?

Para o primeiro caso, exceto os mesmos riscos de segurança de se navegar em uma página web, não imagino muitos problemas.

Para o segundo, e especialmente o terceiro caso, acredito que há todos os riscos de segurança de um aplicativo bancário normal, e recomendo cautela ao fornecer esse serviço para outras pessoas, já que você precisa oferecer garantias de segurança nas operações. Recomendo entrar em contato com um especialista na área, possivelmente através do gerente do seu banco, para entender melhor isso, pois os riscos são grandes, mesmo que você faça tudo certo.

Note que alguns bancos possuem API’s para algumas tarefas (ex: BB e Itaú ), então você pode tentar entrar em contato por esses canais para entender como proceder. O GuiaBolso pode usar essas API’s ou mesmo ter contratos específicos com bancos, que lhe permitem operar dessa forma. Esse tipo de contrato raramente está disponível para o grande público.

Abraço.

1 curtida

Saquei a ideia, o ideal então seria entrar em contato com os bancos desejados, alguns dispõe de API’s para fornecerem dados, acredito que seria uma estratégia mais ideal do que o scraping.

1 curtida

Opa! Valeu por responder. Seria um módulo pra mim mesmo, sem envolver nenhum terceiro, a única coisa que penso em adicionar é mandar uma mensagem no whatsapp e obter o saldo, ou o dado de alguma compra que eu fiz em X dia.

No meu caso estou utilizando o Bradesco, que é bem NULO em relação a isso… Quando eu finalizar pretendo jogar o código no Github, já que não vi nada sobre ainda (em JS). Como não tem API pensei em recorrer a isso kkkkk.

Mas agora esclareceu um pouco a ideia, valeu!

Sim, eu também penso assim, mas nem sempre damos sorte em encontrar uma api, no meu caso eles não tem nada sobre, mas por via das dúvidas, vou tentar entrar em contato com eles pra tirar algumas dúvidas mesmo

Acessar sua própria conta sem burlar a segurança do sistema e sem stressar o mesmo não deve ser ilegal. Só a própria empresa pra te confirmar isso. Nem imagino como faz isso caso tenha token. Por outro lado pode colocar em risco sua própria conta dependendo de como está fazendo.

Raspagem não pode ser ilegal.
O site colocou as instruções no seguríssimo HTML e JavaScript com código a mostra.
Ilegal é raspar dados de terceiros sem consentimento e divulgar.

Faço tanta raspagem que é bem divertido principalmente quando os caras não tem API ou não disponibilizam, nesse caso nossa API é o HMTL e o JavaScript mesmo.

Pode fazer tranquilo e nem perca seu tempo com advogado que a maioria deles não entende nada dessa parte técnica e direitos autorais é uma coisa explicita.

Teria o site que dizer assim quando alguém entra nele.

“É proibido sobre lei tal (que não existe) fotografar, anotar e memorizar o que aparece nessa pagina.”.

Raspagem é uma copia do que apareceu no seu monitor, em nenhum momento vc invadiu o servidor deles. E o próprio navegador permite essa pratica.

E o legal da raspagem é que dá pra deixar a dita pagina oculta.

1 curtida

No começo eu setava o Token e torcia pra o processo ser rápido e dar tempo do token não validar, aí depois coloquei o ReadLine., agora ele só solicita o Token quando é necessário, então não tenho pressa pra ir buscar o Token e inserir

É um processo semelhante ao Selenium, acredito que seja como se eu estivesse acessando, porém de uma forma mais rápida. Como a senha já fica fixo e o servidor não é online, acredito que o risco não seja taaao gigante assim

Realmente, pensando bem tem alguns sites que impedem até o Modo Desenvolvedor também.

Nem fala, o legal é quando você entende de fato o que tá fazendo. Quando a gente consegue algo depois de muita tentativa da vontade até de quebrar o PC kkkkkkk

1 curtida

Bom, não sei qual tecnologia vc está usando, mas mesmo nessas dá pra raspar.
Com um pouco mais de trabalho.

To usando Javascript (Node) + Puppeteer, é bem tranquilo,

(isso do Modo Desenvolvedor é quando a gente aperta F12 ou CTRL+SHIFT+C no navegador)

1 curtida

Fala pessoal, td certo? Bom, acabei chegando em um impasse de não conseguir chamar um determinado link. Eu estou com preguiça de continuar então vou deixar o código aqui, se alguém se interessar:

Ele está chegando até o momento do extrato, só falta ir para os 90 dias.

A function pra ir para os 90 dias é essa: chamarDia(90); (Está no codigo deles)


Raspagem de dados do Banco Bradesco. / Javascript - NodeJS (Uso pessoal, óbvio)

const puppeteer = require("puppeteer")
const readline = require('readline')
const fs = require('fs');

var resp = "";

credentials()

async function readLine() {
    const rl = readline.createInterface({
        input: process.stdin,
        output: process.stdout
    });

    return new Promise(resolve => {
        rl.question('Chave de segurança: ', (answer) => {
            rl.close();
            resolve(answer)
        });
    })
}

async function credentials() {
    const browser = await puppeteer.launch({
        executablePath: 'C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe',
        headless: false,
        defaultViewport: null,
        slowMo: 10,
    });

    const page = await browser.newPage();
    await page.setUserAgent('5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36');
    await page.goto("https://banco.bradesco/html/classic/index.shtm");

    //
    // 1
    // Agencia e Conta
    //

    try {
        await page.waitForSelector("#AGN");
        await page.waitForSelector("#CTA");
    } catch (e) {
        if (e instanceof puppeteer.errors.TimeoutError) {
            // Do something if this is a timeout.
        }const element = await page.$(".scrape");
    }

    await page.type("#AGN", '0000'); //agencia
    await page.type("#CTA", '000000'); //conta
    await page.type("#DIGCTA", '0'); //digito

    //
    // 2
    // Digitar senha e clicar para submitar
    //

    try {
        try {
            await Promise.all([
                page.click(".btn-ok"),
                page.waitForSelector("#Password1")
            ]);
        } catch (error) {
            await browser.close();
            return {error: "Something is wrong with agency and account"};
        }

        const captcha = await readLine();
        await page.type("#Password1", captcha);
        await page.waitForSelector('#loginbotoes\\:botaoAcessar')
        await page.click('#loginbotoes\\:botaoAcessar')

        // aqui é a sua senha,
        // no caso vc vai colocar digito por digito
        await page.waitForSelector(`a.pngfix[title="1"]`) //1º digito
        await page.click(`a.pngfix[title="1"]`) //1º digito
        await page.click(`a.pngfix[title="1"]`) //2º digito
        await page.click(`a.pngfix[title="1"]`) //3º digito
        await page.click(`a.pngfix[title="1"]`) //4º digito
        await page.waitForSelector("#loginbotoes\\:botaoAvancar")
        await page.click("#loginbotoes\\:botaoAvancar")
    } catch (e) {
        if (e instanceof puppeteer.errors.TimeoutError) {
            // Do something if this is a timeout.
        }
    }

    // Click para extrato completo
    try {
        try {
            await Promise.all([
                page.waitForXPath('#linkMaisUtilizadas1'),
                page.$eval(`#linkMaisUtilizadas1`, btn => btn.click())
            ]);
        } catch (e) {
            if (e instanceof puppeteer.errors.TimeoutError) {
                // Do something if this is a timeout.
            }
        }

        console.log(await page.$eval('#boxLisPosFinan > li.itemPosFin > div > span.fr.valor.valorMPF.tabindex', el => el.textContent.match(/\d+ hits/)[0]));

        const selector = `input[href="javascript:OnNextItem('0');"]`

        await Promise.all([
            page.waitForSelector('#fEx\:viewFiltroBusca\:_id102'), // set a filter
            page.click('#fEx\:viewFiltroBusca\:_id102'), // submit the form
            page.waitForNavigation(), // wait for the page to load
            page.evaluate((selector) => document.querySelector(selector).click(), selector)
        ]).catch(e => console.log(e));
    } catch (e) {
        if (e instanceof puppeteer.errors.TimeoutError) {
            // Do something if this is a timeout.
        }
    }

    await page.evaluate(function () {
        chamarDia(90);
    });
}