Git Product home page Git Product logo

Comments (21)

skepticaldev avatar skepticaldev commented on July 3, 2024 2

@damicothiago Parece que o erro foi na linha 103 do StockHistoryCrawler.js.

await page.waitForFunction((cachedAccount, select) => { const value = document.querySelector(select).value; return value != '0' && value != cachedAccount; }, {}, cachedAccount, PAGE.SELECT_ACCOUNT_OPTIONS);

Dando uma olhada na documentação do puppeteer o método waitForFunction tem seu próprio timeout definido de 30000ms. Ele recebe um parâmetro options que você pode passar um timeout maior, por algum motivo a função está demorando mais no caso desse seu outro amigo. Já tentou rodar com headless false? Para verificar o que está acontecendo durante o processo.

Colocando o headless como false, quando você executar o código vai ser aberta uma instância do Chromium e você vai poder ver exatamente o que o puppeteer está fazendo no tempo de execução.

from cei-crawler.

Menighin avatar Menighin commented on July 3, 2024 2

Eita nois... O CEI é todo bugado mesmo -_-
Sim, isso tem a ver. No Crawler eu ignoro a opção Todos justamente pra trazer discriminado qual operação é de qual conta...
Vou ver se consigo implementar algo no sentido de "Se só tem a opcao Todos, traz ela"
Aviso quando tiver no ar 👍

from cei-crawler.

Menighin avatar Menighin commented on July 3, 2024 2

@matheusdalzot a opção navigationTimeout foi adicionada na versão 0.3.0... Se nao me engano vcs estavam utilizando uma versao mais antiga, n?

@damicothiago na verdade parece que temos um problema maior entao :/
Eu ja to pegando a conta a partir daquela label.
Só que esse erro aí, Cannot read rows of null, é porque o crawler nao esta encontrando a tabela de dividendos na pagina.
To achando que o seletor dela é diferente quando a opcao Todos esta selecionada D:
Tu consegue checar pra mim?

Em contas "normais" o seletor das páginas são esses:
Dividendos: .responsive tbody
Negociações: #ctl00_ContentPlaceHolder1_rptAgenteBolsa_ctl00_rptContaBolsa_ctl00_pnAtivosNegociados table tbody
Carteira:

  • Ações: #ctl00_ContentPlaceHolder1_rptAgenteContaMercado_ctl00_rptContaMercado_ctl00_rprCarteira_ctl00_grdCarteira tbody
  • Tesouro direto: #ctl00_ContentPlaceHolder1_rptAgenteContaMercado_ctl00_rptContaMercado_ctl00_trBodyTesouroDireto tbody

Pelo jeito, nesse caso do seu amigo, esse seletor de negociacoes nao existe... =s

Edit: Pode ser tb que ele tenha uma corretora sem negociacao. Vi aqui que o código desse crawler nao tava null-safe. Subi mais um commit, ve se agora vai

from cei-crawler.

Menighin avatar Menighin commented on July 3, 2024 2

Pois é... Vou fechar a issue mas ela ta sempre no radar... Se aparecerem mais usuários reclamando desse comportamento a gente pode ver de endereçar ela... Se por um acaso seu amigo conseguir contatar a B3 e resolver tb, deixa o caminho das pedras aqui hehe

Valeuzão!

from cei-crawler.

Menighin avatar Menighin commented on July 3, 2024 1

Oi @damicothiago !
Isso que o @skepticaldev falou é tudo verdade e é uma boa maneira de investigar o problema.

Tenho também uma outra suspeita:
Esse código basicamente espera que a lista de contas sejam carregadas na página de "Negociações" do CEI.
Se vc entrar la e selecionar uma corretora no input de cima, vai ver que aparece a lista de contas dessa corretora no input de baixo.

Esse await aí estouraria caso não tenha nenhuma conta na corretora, o que acho que nao deveria acontecer.
Talvez você possa confirmar isso com seu amigo. Vê com ele se na página de Negociações todas as corretoras dele possuem ao menos uma conta.
Se alguma de fato não possuir, aí é um bug no código que eu nao esperava e posso ver como arrumar 👍

from cei-crawler.

Menighin avatar Menighin commented on July 3, 2024 1

@damicothiago consegue ver com ele se isso é só pra tela de Negociações? Ou a tela de Proventos e a de Carteira também tem esse comportamento?

from cei-crawler.

skepticaldev avatar skepticaldev commented on July 3, 2024 1

Putz! Que loucura cara. Esse CEI cada dia uma descoberta. @Menighin uma possibilidade para trazer a conta seria retirar desse campo de baixo. Esse "Todos" aparece somente em alguns casos? Pq aqui para mim não chega a ter essa opção.

from cei-crawler.

Menighin avatar Menighin commented on July 3, 2024 1

@damicothiago dada toda essa situação velho, não acho que a gente deva tratar isso no crawler não.
Me parece um corner case muito especifico pra gambiarrar e conseguir funcionar... A solução seria, por exemplo, tentar duas vezes cada clique pra ver se traz dados. Mas aí, todos usuarios que nao tem esse problema e realmente nao tem dados, vão sofrer problemas de performance por causa disso...
Além claro, de dificultar o código em manutenção e evolução...
Não existe nenhum canal da B3 pra talvez abrir um chamado/suporte e eles arrumarem essa bagunça na conta do seu amigo, n? rs

from cei-crawler.

damicothiago avatar damicothiago commented on July 3, 2024

Olá @skepticaldev e @Menighin , estou investigando esses pontos que vocês trouxeram, assim que finalizar meus testes eu trago os resultados.

from cei-crawler.

damicothiago avatar damicothiago commented on July 3, 2024

@Menighin acho que posso ter encontrado algo...
Pedi para que meu amigo enviasse print do CEI dele... e a conta dele não vem um número, vem escrito "Todos":

imagem_cei
console

Para ele não aparece uma opção de Conta numérica, apenas esse "Todos", porém, o histórico é apresentado normalmente... a única diferença é que a conta apresenta "Todos".

Será que pode ser algo relacionado?

from cei-crawler.

damicothiago avatar damicothiago commented on July 3, 2024

@Menighin cara, consegui ver aqui com ele e acontece o mesmo comportamento pra essas duas telas... possivelmente os filtros do portal são algo centralizado, e centralizado com erro hahaha

from cei-crawler.

damicothiago avatar damicothiago commented on July 3, 2024

@skepticaldev Pra mim tbm não aparece... aparentemente pra algumas pessoas acontece esse tipo de situaçao de vir o "Todos", mas não dá pra entender o contexto de quando acontece

from cei-crawler.

Menighin avatar Menighin commented on July 3, 2024

@damicothiago o fix tá na develop, mas o CEI ta tao lento e dando timeout que nao consigo testar -_-
Assim que conseguir lanço a versao 👍

from cei-crawler.

damicothiago avatar damicothiago commented on July 3, 2024

@Menighin O CEI tá bem instável essa semana mesmo kkkk... tbm to com dificuldades pra testar ele.
De qualquer forma vou acessar o develop e tentar testar essa fix

from cei-crawler.

matheusdalzot avatar matheusdalzot commented on July 3, 2024

Opa, aproveitando o post sobre timeout, eu também to passando por instabilidades na hora de efetuar o "Login at CEI"
E pelo Insomnia, eu identifiquei que após 30 segundos ele retorna erro de login falhou, navegando pelo código eu encontrei um loginTimeout: 35000, porém eu tentei alterar para 60000 mas mesmo assim ele continua dando timeout em 30 segundos, tem como alterar esse timeout?
Lembrando que estou usando o App Engine do GCloud, teria como aumentar esse limite do timeout? Pois pro processo que vou utilizar, o timeout não ajuda pois o usuário poderá aguardar o tempo necessário para a importação.

from cei-crawler.

damicothiago avatar damicothiago commented on July 3, 2024

@matheusdalzot existe uma option na criação da instância do crawler chamada navigationTimeout, passa ela como option e então você conseguirá aumentar esse timeout.

from cei-crawler.

matheusdalzot avatar matheusdalzot commented on July 3, 2024

@damicothiago opa amigo, eu tentei fazer assim:

const CRAWLER_OPTIONS = {
puppeteerLaunch: {
args: [
"--no-sandbox",
"--disable-setuid-sandbox",
"--disable-dev-shm-usage",
"--single-process",
],
},
trace: true,
navigationTimeout: 90000,
};

Porém sem sucesso, continua dando timeout em 30 segundos :/

EDIT:
Notei que hoje o CEI ta muito lento para conexão também, mas mesmo assim ainda queria aumentar o timeout pra poder carregar os dados mesmo que demora mais de 1 minuto

from cei-crawler.

damicothiago avatar damicothiago commented on July 3, 2024

@Menighin Boa tarde! Depois de tentar e muito, consegui fazer um teste agora kkkk... ele está retornando que rows vem de um objeto null

Logging at CEI...
Selecting institution 3 - XP INVESTIMENTOS CCTVM S/A (3)
Waiting loading to hide
Loading hidden
Selecting account 0
Processing stock history data
Error: Evaluation failed: TypeError: Cannot read property 'rows' of null

Apesar do combro estar com value 0, ainda existe um numero de conta numérico referenciando a tabela da da corretora.
EDIT: (Da uma olhada no meu comentário que coloquei a foto do CEI, o XP Investimentos possui um "Conta Nº...")

from cei-crawler.

damicothiago avatar damicothiago commented on July 3, 2024

@Menighin Opa, consegui fazer agora novos testes... não sei porque, mas agora o CEI dele está aparecendo "Todos" e o número da conta no combo (Imagem abaixo). Acho que era algum BUG do CEI, porque antes estava apenas "Todos", como eu havia mostrado na imagem em um comentário anterior.
1

Dei uma olhada nos elementos de table que você havia pedido, e todos são exatamente essa mesma estrutura que você colocou no último comentário (menos mal hahaha).

Pra conseguir ser mais efetivo, consegui ver o CEI dele e fiz exatamente esses passos:

  1. Acessei a tela de Negociações de Ativos, existe apenas uma corretora (XP) que já vem selecionada com disabled ativo.
  2. O combo de conta vem selecionado "Todos" por padrão, sendo que o onchange não habilita o loader da página.
  3. Após selecionar o numero da conta, cliquei em "Consultar", o loader da página ativou, a requisição ajax foi feita e o loader sumiu depois da requisição acabar (+- 1 segundo), mas nada foi carregado na tela (o append do html da tabela não aconteceu).
  4. Após isso, cliquei novamente em consultar, o loader não apareceu, e agora sim a tabela apareceu.
  5. Atualizei a tela e fiz o mesmo processo com o "Todos", aconteceu exatamente a mesma coisa, o primeiro clique não trouxe a tabela, e o segundo clique sim trouxe.
  6. Fiz esse teste diversas vezes atualizando a página, e acontece sempre a mesma situação. O primeiro clique em Consultar não traz a tabela na página, e o segundo sim.

Acredito que esteja havendo um comportamento diferente das demais contas nesse caso.


Fiz o teste com a última versão que você disponibilizou em develop, e acontece o seguinte erro:

Logging at CEI...
Selecting institution 3 - XP INVESTIMENTOS CCTVM S/A (3)
Waiting loading to hide
Loading hidden
Selecting account 0
Processing stock history data
Found 0 operations
Error: Evaluation failed: TypeError: Cannot read property 'textContent' of null
    at __puppeteer_evaluation_script__:1:46
    at ExecutionContext._evaluateInternal (/home/src/node_modules/puppeteer/lib/ExecutionContext.js:122:13)
    at processTicksAndRejections (internal/process/task_queues.js:97:5)
    at async ExecutionContext.evaluate (/home/src/node_modules/puppeteer/lib/ExecutionContext.js:48:12)
    at async Function.getStockHistory (/home/src/app/lib/StockHistoryCrawler.js:145:40)
    at async CeiCrawler.getStockHistory (/home/src/app/lib/CeiCrawler.js:111:16)
    at async /home/src/app/cei-process-new.js:52:40
  -- ASYNC --
    at ExecutionContext.<anonymous> (/home/src/node_modules/puppeteer/lib/helper.js:111:15)
    at DOMWorld.evaluate (/home/src/node_modules/puppeteer/lib/DOMWorld.js:112:20)
    at processTicksAndRejections (internal/process/task_queues.js:97:5)
  -- ASYNC --
    at Frame.<anonymous> (/home/src/node_modules/puppeteer/lib/helper.js:111:15)
    at Page.evaluate (/home/src/node_modules/puppeteer/lib/Page.js:860:43)
    at Page.<anonymous> (/home/src/node_modules/puppeteer/lib/helper.js:112:23)
    at Function.getStockHistory (/home/src/app/lib/StockHistoryCrawler.js:145:51)
    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:52:40
Use --update-env to update environment variables

Também tentei fazer com o código da master, mas continua com o problema original da Issue.

OBS.: Caso queira mais testes podemos combinar um colab, pra sermos mais efetivos nos testes.

from cei-crawler.

damicothiago avatar damicothiago commented on July 3, 2024

@Menighin Concordo com você, nesse caso o único jeito que vejo pra contornar esse erro seria uma tentativa de duplo clique caso o primeiro não retornasse resultado.
E realmente, pra contas que não possuem dados, sempre haverá 2 cliques.

O único medo que tenho é que o número de contas assim seja muito alto, o que não dá pra saber hahaha.
Mas acho que podemos encerrar essa Issue, também acho que é uma gambiarra que não vale a pena por conta do processamento a mais.

Obrigado pela ajuda!

from cei-crawler.

Menighin avatar Menighin commented on July 3, 2024

@damicothiago com as últimas alterações do cei-crawler foi possível fazer um retry de forma fácil pra passar por esse bug da B3 que eu lancei agora na versao 2.0.2... Um amigo meu também tinha e agora ta conseguindo pegar os dados. Talvez te ajude aí tb 👍

from cei-crawler.

Related Issues (20)

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.