Comments (21)
@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.
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.
@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.
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.
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.
@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.
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.
@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.
Olá @skepticaldev e @Menighin , estou investigando esses pontos que vocês trouxeram, assim que finalizar meus testes eu trago os resultados.
from cei-crawler.
@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":
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.
@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.
@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.
@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.
@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.
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.
@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.
@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.
@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.
@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.
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:
- Acessei a tela de Negociações de Ativos, existe apenas uma corretora (XP) que já vem selecionada com
disabled ativo
. - O combo de conta vem selecionado "
Todos
" por padrão, sendo que oonchange
não habilita o loader da página. - Após selecionar o numero da conta, cliquei em "
Consultar
", o loader da página ativou, arequisiçã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). - Após isso, cliquei novamente em consultar, o loader não apareceu, e agora sim a tabela apareceu.
- 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.
- 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.
@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.
@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)
- Problemas com acesso por conta de Captcha do CEI HOT 15
- Quantidade de acesso HOT 4
- Extrair dados do Tesouro Extrato Analítico e Extrato BM&FBOVESPA HOT 3
- Refresh dos cookies HOT 4
- Recaptcha HOT 1
- QR code doação HOT 1
- StockHistory missing HOT 2
- Não realiza o login e não da exception HOT 2
- StockHistory - É possível pegar de todas instituições? HOT 1
- valor errado na doc HOT 1
- Conta em uma corretora com mais de uma carteira HOT 1
- Recebendo erro ao loggar no CEI HOT 3
- Extrato CETIP HOT 4
- Adicionar suporte a split de ações HOT 3
- Nova area logada do CEI HOT 6
- Erro de dependência: puppeteer e Chromium HOT 2
- Atualização de URL em LastExecutionCrawler HOT 3
- TypeError: Cannot read properties of undefined (reading 'data') HOT 2
- Problema ao usar user-resolve
- Identificação dos bancos
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from cei-crawler.