Git Product home page Git Product logo

cei-crawler's People

Contributors

alexandrerocco avatar amakens avatar brunoosilva avatar felipesdias avatar menighin avatar thiagodds 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  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

cei-crawler's Issues

Lidar com CPF ou Senha errado

Fala João,

Percebi que quando se coloca um CPF ou Senha errado ele acaba esperando o timeout para dar erro na chamada. Fazendo um teste vi que o site da CEI gera um dialog alertando a respeito do ocorrido. Fazendo umas pesquisas vi o puppeteer não lida automaticamente com dialogs, é preciso lidar dentro do método page.on.

Ex:
page.on('dialog', async dialog => {
console.log(dialog.message());
await dialog.dismiss();
});

Estou tentando implementar mais estou com dificuldade de lidar com os erros disparados dentro de uma função assíncrona.

Acho que seria legal implementar algo para lidar com cpf ou senha errados. Assim não seria preciso esperar até o timeout para retornar o erro.

Abraço!

Tempo para Login

Boa tarde, no momento do login apos 35 segundos considera que o login falhou, mas algumas vezes notei que o site da B3 demora mais que esse tempo para retornar a requisicao de login, talvez seria interessante incluir essa variavel como customizada juntamente com o ceiCrawlerOptions, para que em casos onde o retorno demore a aconter nao aconteca esse erro, mesmo sem ser um erro de login.

Trecho de codigo a que me refiro:

{
                id: 'fail',
                pr: this._page.waitFor(35000) // After 35s, consider the login has failed
            }

Valeu!

valor errado na doc

mudar de "treasureWallet": [] para "nationalTreasureWallet": []

tentei subir o fix, mas sem permissao pra subir branch

Quantidade de acesso

Bom dia amigo, tudo bom?
Existe alguma restrição de acesso na lib? É possível o CEI bloquear minha conta? Você algum solução para isso?
Vi em seu repositório stoincs que você espera a instancia ficar livre, poderia me explicar melhor?

Erro de dependência: puppeteer e Chromium

Opa! Tudo beleza?

Primeiramente, meus parabéns pelo excelente trabalho! Facilitou a vida de muito dev por aí!

Estou tendo um problema e tenho razões para acreditar que não é minha máquina (até porque eu estou rodando as funções na nuvem).

Error: Could not find expected browser (chrome) locally. Run npm install to download the correct Chromium revision (901912).
at ChromeLauncher.launch (/var/task/node_modules/puppeteer-core/lib/cjs/puppeteer/node/Launcher.js:88:27)
at async CeiLoginService._getTokenByUserResolve (/var/task/node_modules/cei-crawler/src/lib/CeiLoginService.js:36:25)
at async CeiLoginService.getToken (/var/task/node_modules/cei-crawler/src/lib/CeiLoginService.js:26:24)
at async CeiCrawler._login (/var/task/node_modules/cei-crawler/src/lib/CeiCrawler.js:67:29)
at async CeiCrawler.getConsolidatedValues (/var/task/node_modules/cei-crawler/src/lib/CeiCrawler.js:77:9)

Já tentei instalar o Chromium e o puppeteer localmente e não funcionou. E de qualquer forma não pretendo usar essas funções localmente. O package precisa funcionar por si só. Tenho usado o cei-crawler v2 sem problema.

Muito obrigado!

Conta em uma corretora com mais de uma carteira

Em algumas corretoras é possível comprar ações e usar elas como garantia para outras operações. Para esses casos o CEI separa as ações em duas carteiras diferentes dentro da mesma conta.

Um exemplo para ilustrar:
image

Nesse cenário o crawler só pega as informações da primeira carteira.
Acho que seria interessante o crawler conseguir pegar as duas carteiras.

Problema ao usar user-resolve

Atualize a função _getMainPage com a url nova.

if (p.url().indexOf('b3investidor.b2clogin.com/b3Investidor.onmicrosoft.com/oauth2/v2.0/authorize') !== -1)

Adicionar suporte a split de ações

Estava aqui olhando o meu CEI, e um dos eventos que o crawler ainda não suporta é o split/inplit de ações (quando você tem 1 ações e passa a ter 20, ou vice versa).

No CEI, é um bloco de eventos com esse, dentro da seção de proventos:
https://imgur.com/kz7NcVF

Ele aparece muito raramente, mas seria legal ter a informação para poder lembrar quem tem controle em planilhas (ou sistemas) para poder ajustar o preço médio :)

Eu já até implementei a alteração aqui e consegui adicionar um novo array no retorno do método getDividends():

"splitEvents": [
    {
        "stock": "B3",
        "stockType": "ON NM",
        "code": "B3SA3",
        "type": "DESDOBRAMENTO DE AÇÕES",
        "date": "2021-05-18T03:00:00.000Z",
        "baseQuantity": 49,
        "factor": 1,
        "destinationCode": "B3SA3",
        "quantity": 98,
        "eventValue": 200,
        "exerciseValue": 0
    }
  ]

Caso acham que faz sentido, posso abrir um PR! O que acham?

Carteira consolidada.

Na página o CEI disponibiliza as informações consolidadas da carteira. Todos os ativos a quantidade e o valor total da cotação atualizado até o início do dia (acho que atualiza na madrugada).

Sugiro a implementação de um método que pegue essas informações. Apesar do delay de atualização dos valores de cada ativo (uma vez por dia apenas), isso pode facilitar a vida de quem não quer implementar a chamada para uma outra API para pegar a cotação em tempo real. Acredito que existem casos de uso que não precisam de informações em tempo real e podem fazer uso desse método.

Extrair dados do Tesouro Extrato Analítico e Extrato BM&FBOVESPA

Boa tarde pessoal,

Primeiramente, parabéns pelo crawler, está muito bem feito e muito rápido.

Estava olhando esses 2 relatórios Tesouro Extrato Analítico e Extrato BM&FBOVESPA, percebi que hoje ainda não foi implementando, teriam intenção de extrair essa informações ?

Percebi que no caso do Tesouro Extrato Analítico, para pegar as informações é aberto um Modal na tela e dentro do modal uma tabela. Na estrutura que tem hoje do crawler ele suportaria pegar a informação em modal ?

Em questão ao Extrato BM&FBOVESPA, ele exporta um Excel (Download), saberia dizer também se na arquitetura atual, suportaria o download de arquivo ?

Obrigado

Identificação dos bancos

No ceiapp eles disponibilizavam o codigo interno do banco (ex 1099 - INTER DTVM LTDA) mas agora so exibem o documento (cnpj) e um nome diferente...
A migração entre as plataformas fica instavel.

Alguém tem alguma lista dos bancos da plataforma nova?

ex: essa da plataforma antiga
[https://clubedospoupadores.com/codigo-corretoras]

Ou alguma forma de combinar ambas...

Erro ao buscar dados da carteira

Olá!

Não tenho conseguido utilizar o getWallet(), ele chega a logar no CEI, começa a buscar os dados da carteira porém da erro no meio. Segue o log completo com o erro:

Logging at CEI...
Selecting institution 308 - CLEAR CORRETORA - GRUPO XP (308)
Selecting account 2129
Processing wallet data
Error ReferenceError: data is not defined
    at Function._callee2$ (/Users/matheuscunha/Documents/Projetos/cei/node_modules/cei-crawler/app.js:1:20417)
    at tryCatch (/Users/matheuscunha/Documents/Projetos/cei/node_modules/regenerator-runtime/runtime.js:45:40)
    at Generator.invoke [as _invoke] (/Users/matheuscunha/Documents/Projetos/cei/node_modules/regenerator-runtime/runtime.js:274:22)
    at Generator.prototype.<computed> [as next] (/Users/matheuscunha/Documents/Projetos/cei/node_modules/regenerator-runtime/runtime.js:97:21)
    at asyncGeneratorStep (/Users/matheuscunha/Documents/Projetos/cei/node_modules/@babel/runtime/helpers/asyncToGenerator.js:3:24)
    at _next (/Users/matheuscunha/Documents/Projetos/cei/node_modules/@babel/runtime/helpers/asyncToGenerator.js:25:9)
    at processTicksAndRejections (internal/process/task_queues.js:93:5)

Recebendo erro ao loggar no CEI

Fala pessoal, estou recebendo erro de LOGIN_FAILED, porém se loggo a resposta do método de login, parece que o erro está relacionado a essa mensagem:

2,'The HTTP service located at http://localhost:8053/CEIServicos/GerenciadorGeral.svc is unavailable
Alguma idéia do que pode estar causando esse erro?

Screen Shot 2021-05-16 at 15 01 06

TimeoutError: waiting for function failed: timeout 30000ms exceeded

Opa, blz?

Antes de mais nada, parabéns pelo pacote, muito legal!
Já consegui fazer o uso normal dos serviços, inclusive já obtive dados de uma carteira minha e de alguns amigos, porém, 1 amigo em específico está dando o seguinte erro:

Logging at CEI...
Selecting institution 3 - XP INVESTIMENTOS CCTVM S/A (3)
TimeoutError: waiting for function failed: timeout 30000ms exceeded
at new WaitTask (/home/src/node_modules/puppeteer/lib/DOMWorld.js:549:28)
at DOMWorld.waitForFunction (/home/src/node_modules/puppeteer/lib/DOMWorld.js:454:12)
at Frame.waitForFunction (/home/src/node_modules/puppeteer/lib/FrameManager.js:657:28)
at Page.waitForFunction (/home/src/node_modules/puppeteer/lib/Page.js:1141:29)
at Function.getStockHistory (/home/src/app/lib/StockHistoryCrawler.js:103:24)
at processTicksAndRejections (internal/process/task_queues.js:97:5)
at async CeiCrawler.getStockHistory (/home/src/app/lib/CeiCrawler.js:111:16)
at async /home/src/app/cei-process-new.js:50:36

Tentei dar uma olhada no que poderia ser, mas não encontrei nada que pudesse resolver.
As options que estou utilizando:

            const ceiCrawlerOptions = {
                puppeteerLaunch: {
                    headless: true,
                    timeout: 0,
                    args: ['--no-sandbox']
                },
                trace: true,
                capEndDate: true
            };

O erro acontece na chamada de:
let stockHistory = await ceiCrawler.getStockHistory();

Agradeço desde já qualquer ajuda,
Abraço

QR code doação

O QR code pra doação esta quebrando aqui no nu, tava tentando agradecer esse projeto foda que vocês disponibilizaram.

TypeError: Cannot read properties of undefined (reading 'data')

Toda vez que tento utilizar a opcao 'raw-token' para login ele me retorna o seguinte erro:

/node_modules/cei-crawler/src/lib/AxiosWrapper.js:42
            const msgStr = e.response.data != null ? (e.response.data.message || e.response.data.trim()) : e.message;
                                      ^

TypeError: Cannot read properties of undefined (reading 'data')

Não realiza o login e não da exception

Pessoal, alguém usou recentemente?

Não estou tomando erro, mas não está autenticando.

To usando o código de exemplo do tratamento de erro do login.

Valeuu!

Recaptcha

Bom Dia,

Primeira mente que repositório incrível , que iniciativa fenomenal velho. Parabéns.

Deixa eu perguntar esse crawler funciona mesmo com o recaptcha existente na tela inicial do login do cei ?

Preço médio.

Na página existe uma tabela com o preço médio de compra e preço médio de venda de cada ativo.

Sugiro a implementação de um método que pega essas informações. Com o preço médio de compra é possível o usuário calcular os rendimentos baseado no preço atual do ativo e com o preço médio de venta é possível calcular o lucro/prejuízo do ativo que foi vendido.

Limitação com a declaração de campos/atributos públicos

Olá, eu detectei um erro que acontece simplesmente executando a biblioteca. Pela minha pequisa eu encontrei na documentação do Mozilla que:

Public and private field declarations are an experimental feature (stage 3) proposed at TC39, the JavaScript standards committee. Support in browsers is limited, but the feature can be used through a build step with systems like Babel.

Talvez por ser experimental esteja ocadionando o erro. Informações abaixo:

Node: v10.14.2

Erro:

$ node crawler.js     
/home/mgm/dev/puppeteer-cei/node_modules/cei-crawler/src/lib/CeiCrawler.js:9
    _isLogged = false;
              ^

SyntaxError: Unexpected token =
    at new Script (vm.js:79:7)
    at createScript (vm.js:251:10)
    at Object.runInThisContext (vm.js:303:10)
    at Module._compile (internal/modules/cjs/loader.js:657:28)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:700:10)
    at Module.load (internal/modules/cjs/loader.js:599:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:538:12)
    at Function.Module._load (internal/modules/cjs/loader.js:530:3)
    at Module.require (internal/modules/cjs/loader.js:637:17)
    at require (internal/modules/cjs/helpers.js:22:18)

Código:

const CeiCrawler = require("cei-crawler");

class Foo {
  async start(email, password) {
    let ceiCrawler = new CeiCrawler(email, password, {
      /* options */
      trace: true
    });

    let stockHistory = await ceiCrawler.getStockHistory();

    console.log(JSON.stringify(stockHistory, undefined, 4));
  }
}

const FooInstance = new Foo();
FooInstance.start("#####", "#####");

Eu tenho uma proposta para corrigir: mover para dentro do construtor as declarações. Vou subir um PR.

[Sugestão] Implementar uma nova função devido a erro recorrente

Opa @Menighin tenho uma sugestão que acho que evitariam alguns problemas.

Teria a possibilidade de usar o mesmo login por exemplo da função /wallet para retornar os registros da função /transactions e /dividends?

Assim usaria apenas 1 login para baixar tudo, por que no momento ele faz 3 logins certo?
E muitas das vezes acontece de efetuar o primeiro login corretamente mas depois da erro de LOGIN_FAILED,
então se desse pra retornar por exemplo:
Uma nova função /all por exemplo que retornasse assim:

wallet: {
tudo da função /wallet
},
transactions: {
tudo da função /transactions
},
dividends: {
tudo da função /dividends
}

Eu peço ajuda pois não faço a mínima ideia de como implementar isso no plugin cei-crawler

Obrigado

Refresh dos cookies

Boa tarde pessoa,

Eu percebi que os cookies costumam expirar bastante, vocês sabem se existe alguma forma de dar um refresh neles para não perder a sessão? Não gostaria de guardar os dados de usuário/senha, mas não gostaria de que ficasse me pedindo todo dia. Sabem de alguma forma para solucionar esse problema?

Obrigado pessoal, e o projeto ta massa!

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.