MPMG-DCC-UFMG / C01

Coleta de Dados Públicos
GNU General Public License v3.0
18 stars 9 forks source link

Investigar bug o qual a fonte no webdriver apresenta comportamento diferente do navegador. #806

Closed rennancl closed 2 years ago

rennancl commented 3 years ago

Comportamento Esperado

As fontes deveriam ser renderizada igualmente tanto no navegador quanto num webdriver.

Comportamento Atual

A fonte descrita em #635 apresenta elementos diferentes na versão webdriver/processamento dinâmico versus navegador. Mais especificamente, a interface de manipulação de filtros não é renderizada no webdriver, assim não é possível encontrar os elementos que filtram na página e a coleta fica inviável. Os screenshots abaixo mostram esses elementos.

Passos para reproduzir o erro

  1. Importar a configuração abaixo (e trocar o save path)
  2. Executar
  3. Observar o screenshot gerado e o log (erro de elemento não encontrado no clique)
  4. Comparar com passos executados manualmente no navegador

Especificações da Coleta

Especificação abaixo criada pelo @carbo6ufmg

{
  "source_name": "[Realiza\u00e7\u00e3o-F01] Licita\u00e7\u00f5es Varginha",
  "base_url": "https://leideacesso.etransparencia.com.br/varginha.prefeitura.mg/TDAPortalClient.aspx?416",
  "obey_robots": false,
  "data_path": "/home/pedro/MPMG/coletas/varginha/licitacao",
  "request_type": "GET",
  "form_request_type": "POST",
  "antiblock_download_delay": 2,
  "antiblock_autothrottle_enabled": false,
  "antiblock_autothrottle_start_delay": 2,
  "antiblock_autothrottle_max_delay": 10,
  "antiblock_ip_rotation_enabled": false,
  "antiblock_ip_rotation_type": "tor",
  "antiblock_max_reqs_per_ip": 10,
  "antiblock_max_reuse_rounds": 10,
  "antiblock_proxy_list": "",
  "antiblock_user_agent_rotation_enabled": false,
  "antiblock_reqs_per_user_agent": 100,
  "antiblock_user_agents_list": "",
  "antiblock_insert_cookies_enabled": false,
  "antiblock_cookies_list": "",
  "captcha": "none",
  "has_webdriver": false,
  "webdriver_path": "",
  "img_xpath": "",
  "sound_xpath": "",
  "dynamic_processing": true,
  "explore_links": false,
  "link_extractor_max_depth": null,
  "link_extractor_allow_url": "",
  "link_extractor_allow_domains": "",
  "link_extractor_tags": "",
  "link_extractor_attrs": "",
  "link_extractor_check_type": false,
  "link_extractor_process_value": "",
  "download_files": false,
  "download_files_allow_url": "",
  "download_files_allow_extensions": "",
  "download_files_allow_domains": "",
  "download_files_tags": "",
  "download_files_attrs": "",
  "download_files_process_value": "",
  "download_files_check_large_content": false,
  "download_imgs": false,
  "steps": "{\"step\":\"root\",\"depth\":0,\"children\":[{\"step\":\"espere\",\"depth\":1,\"arguments\":{\"segundos\":\"15\"}},{\"step\":\"clique\",\"depth\":1,\"arguments\":{\"elemento\":\"\\\"/html/body/form/div[2]/div[2]/div[1]/div/div[2]/div/section/div/div/div/div/div[3]/div[2]/div/div/div/div[3]/div/table/tbody/tr[4]/td[4]/div\\\"\"}},{\"step\":\"espere\",\"depth\":1,\"arguments\":{\"segundos\":\"15\"}},{\"step\":\"screenshot\",\"depth\":1,\"arguments\":{}},{\"step\":\"salva_pagina\",\"depth\":1,\"arguments\":{}},{\"step\":\"clique\",\"depth\":1,\"arguments\":{\"elemento\":\"\\\"//*[@id='FILTERCOMBO_b311ccd70c9b49abb6975818281c9cc6DSA00_ano']\\\"\"}},{\"step\":\"clique\",\"depth\":1,\"arguments\":{\"elemento\":\"\\\"/html/body/form/div[2]/div[2]/div[1]/div/div[2]/div/section/div[2]/div[1]/div/div/div[1]/div[2]/div/div/div/div[2]/table/tbody/tr/td[1]/table/tbody/tr[1]/td[1]/div/table/tbody/tr/td/select/option[1]\\\"\"}}]}",
  "encoding_detection_method": 1,
  "templated_url_parameter_handlers": [],
  "static_form_parameter_handlers": [],
  "templated_url_response_handlers": [],
  "static_form_response_handlers": [],
  "crawler_id": 28,
  "instance_id": "163361788933424"
}

O caminho de salvamento dos dados é a ánica entrada que deve ser alterada.

Sistema (caso necessário)

E qualquer sistema (incluindo local)

Screenshots (caso necessário)

Screenshot gerado pelo passo: image

Screenshot no navegador: image

rennancl commented 2 years ago

Hey team! Please add your planning poker estimate with ZenHub @caiocvsilva @elvesrodrigues @matheusfebarbosa

elvesmrodrigues commented 2 years ago

@caiocvsilva e @matheusfebarbosa eu dei 3 pontos para essa issue pois ao meu ver, definir na configuração do pyppetteer o tamanho da tela programaticamente resolveria. O que seria simples. Mas posso estar errado.

louisaturn commented 2 years ago

Olá, pessoal!

Essa issue foi criada pela impossibilidade de realizar a coleta https://github.com/MPMG-DCC-UFMG/C01/issues/635, porque o nosso webdriver não apresentava todos os elementos da página. Acreditávamos que era uma questão de tamanho da tela, até que percebi uma coisa no código-fonte da página: os elementos desaparecidos têm características em comum, relacionadas ao user agent stylesheet.

Um exemplo: usando o navegador Chrome, inspecionei o div.btnMenu, faltante no screenshot do nosso webdriver.

div

displayblock

Analisando o código, note que na seção user agent stylesheet, temos que a propriedade display:block está riscada, indicando que o bloqueio dessa propriedade não se aplica ao meu user agent que está acessando a página nesse momento. Assim, desconfiei de que essas informações faltantes no screenshot do nosso sistema estão relacionadas ao user agent do nosso webdriver, com navegador Chromium.

Para testar essa hipótese, criei um playwright para acessar e printar a página utilizando outros navegadores. Abaixo, os resultados:

Teste 1: Chromium pglicitacoes

Teste 2: Webkit pglicitacoesw

Teste 3: Firefox pglicitacoesf

Tivemos sucesso usando o user agent do Firefox. Porém, esse navegador não é uma alternativa no sistema atual, em que estamos usando Pyppeteer, que não possui Cross-Browser. Em breve, poderemos resolver esse problema facilmente: decidimos por dar ao usuário do nosso sistema a opção de usar outros navegadores.

Assim, estou fechando a issue de investigação e abrindo outra que especifica o comportamento decidido em equipe.