saviobatista / siros

1 stars 0 forks source link

Erro no Arch com Chrome #1

Closed luciodaou closed 2 years ago

luciodaou commented 2 years ago

Arch Linux no WSL Chrome instalado pelo Yay/AUR - Version 97.0.4692.99 (Official Build) (64-bit) Chromedriver instalado pelo Yay/AUR - ChromeDriver 97.0.4692.71 Em casa, sem proxy.

Traceback (most recent call last):
  File "/home/user/Git/siros/siros.py", line 14, in <module>
    voos = robot.parse(begin=datetime.now().strftime('%d/%m/%Y'),end=(datetime.now() + timedelta(days=1)).strftime('%d/%m/%Y'))
  File "/home/user/Git/siros/lib/siros_parser.py", line 70, in parse
    porcentagem = self.browser.execute_script("return document.querySelector('downloads-manager').shadowRoot.querySelector('#downloadsList downloads-item').shadowRoot.querySelector('#progress').value")
  File "/home/user/.local/lib/python3.10/site-packages/selenium/webdriver/remote/webdriver.py", line 878, in execute_script
    return self.execute(command, {
  File "/home/user/.local/lib/python3.10/site-packages/selenium/webdriver/remote/webdriver.py", line 424, in execute
    self.error_handler.check_response(response)
  File "/home/user/.local/lib/python3.10/site-packages/selenium/webdriver/remote/errorhandler.py", line 247, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.JavascriptException: Message: javascript error: Cannot read properties of null (reading 'shadowRoot')
  (Session info: headless chrome=97.0.4692.99)
Stacktrace:
#0 0x561d26466a23 <unknown>
#1 0x561d25f31e18 <unknown>
#2 0x561d25f34c9c <unknown>
#3 0x561d25f34a96 <unknown>
#4 0x561d25f35642 <unknown>
#5 0x561d25f99873 <unknown>
#6 0x561d25f85992 <unknown>
#7 0x561d25f98c5b <unknown>
#8 0x561d25f85883 <unknown>
#9 0x561d25f5b3fa <unknown>
#10 0x561d25f5c4c5 <unknown>
#11 0x561d2649616d <unknown>
#12 0x561d264ac5bb <unknown>
#13 0x561d26497e75 <unknown>
#14 0x561d264ace85 <unknown>
#15 0x561d2648b86f <unknown>
#16 0x561d264c7ae8 <unknown>
#17 0x561d264c7c68 <unknown>
#18 0x561d264e2aad <unknown>
#19 0x7f0918696259 <unknown>
luciodaou commented 2 years ago

Mesmo erro no Ubuntu com Chromium, também sem proxy, em casa.

saviobatista commented 2 years ago

Trata-se de um problema relacionado ao headless-mode do Chrome (sem janela) que não permite execução de código JavaScript responsável por varrer e localizar o nome do arquivo que foi feito download pela página chrome://downloads pois é embutido nesta páginas vários nodes shadowRoot que não permitem acesso sem a janela em si aberta, quebrando o acesso via javascript que retorna erro ao tentar localizar um objeto por este localizador.

Temporariamente desativei o headless mode no commit (0856250a7916b623629f55c92bb636f29b7c40ac) assim será aberta a janela do navegador para que seja possível o restante do processamento do código.

Para tratativas analiso mudar a metodologia de processamento do arquivo baixado, já penso em varrer o diretório tmp criado durante a execução para o download e o arquivo que estiver lá será tratado, não é o melhor método, mas abre caminho para o uso do headless mode, porém ainda tenho que monitorar o tamanho do arquivo até que não haja mudanças ou que seja de fato finalizado o download, esta é a grande questão do javascript que monitora o download.

saviobatista commented 2 years ago

Usando varredura de diretórios e analisando o nome do arquivo por expressões regulares, foi possível tratar o problema do gerenciamento do download, visto que o Chrome usa um nome temporário enquanto o download é feito e na finalização apenas define o nome final. Assim monitorando um diretório que fica vazio antes de iniciar o download e analisando o nome do arquivo, foi possível rastrear o download e sua finalização. Solucionado no commit (91567a00b431555b121235f2714e04b3a632791e).