(Pergunta) Ajuda para baixar PDF/interagir com PDF viewer, automação Web com selenium python

Boa noite! Primeiramente, sou muito novo mesmo nesse mundo da programação, digamos que nem o básico eu domino ainda, então me perdoem caso eu não saiba explicar direito.

Estou automatizando o sistema que a minha empresa usa. Cheguei em uma parte onde preciso baixar alguns PDF's, e estou tendo dificuldade em lidar com isso. a forma de interagir com o PDF é a seguinte: Clico no elemento de uma imagem que a partir daí o PDF é gerado em um PDF Viwer, não é nenhum link direto ou coisa assim. O PDF viewer aparentemente não fica diretamente no código da página, tornando impossível, que eu saiba, interagir com ele utilizando o Selenium. Cheguei a tentar alguns meios de baixar diretamente através do link que o elemento do PDF viewer contém mas não funcionou, tanto que se eu copiar esse link e tentar abrir fora do site não funciona, acredito que talvez esteja relacionado ao fato do site exigir login. "Resolvi" este problema utilizando pyautogui para controlar o mouse e clicar no botão de download do pdf viewer. Não é a solução que eu desejo, e por isto estou aqui pedindo ajuda, nao quero que ninguém resolva isso por mim, gostaria apenas de saber se existe outra forma de resolver isto e quais bibliotecas eu poderia utilizar. Enfim, é isso, espero que tenha dado pra explicar minimamente. E sim, este é meu primeiro projeto, comecei 1 mês atrás com 0 noção de programação e estou evoluindo junto com ele.

A primeira coisa que você precisa fazer é analisar o tráfego do site. A maneira mais fácil de fazer isso é usando a ferramenta Developer Tools (DevTools) que a maioria dos navegadores já têm. Procura no Google como abrir no seu navegador. Abre o site, abre o DevTools, atualiza a página (F5), clica onde tem que clicar para gerar o PDF, vai na aba Network dentro do DevTools e veja todo tráfego que aconteceu para gerar este PDF. Procura qual URL foi chamada para gerar o PDF. Quando você clica numa URL aparecem abas com algumas informações. A aba mais importante é a aba Headers. Nessa aba tem informações de quais cabeçalhos da requisição foram enviados e quais cabeçalhos foram recebidos na resposta. Com essas informações, agora você sabe qual URL deve abrir ou interceptar e quais headers usar para obter o conteúdo desejado. Se funcionar apenas abrindo a URL certa, ótimo. Aí é só conectar na URL com os headers corretos. Pode fazer isso direto com Python. As bibliotecas HTTP clientes mais conhecidas em Python são requests, aiohttp, httpx, curl_cffi. Em todas você vai poder chamar a URL com método GET ou POST (se foi GET ou POST também aparece na aba Headers do DevTools) e salvar o conteúdo recebido em arquivo. Se não funcionar apenas abrindo a URL certa, então você precisa interceptar a conexão todas as vezes. Para interceptar a conexão com o Selenium puro, até onde eu sei, não dá. Para isso existe o projeto Selenium Wire. A mágica é definir uma função para a propriedade request_interceptor do driver. Nessa função que você criar vai conseguir acessar a request.url e request.headers. Com essa url e esses headers vc consegue usar as bibliotecas que falei acima para conectar na url certa com os headers e salvar o conteúdo em arquivo local. Uma outra opção é usar o Playwright. Nele você pode usar a função page.route() definindo qual padrão de URL quer interceptar. Daí vai conseguir acessar route.request.url e route.request.all_headers() que é o que vc precisa.

Bom, pelo menos metade do que você escreveu aí eu não entendi kkkk Vou tirar um tempo pra estudar sobre tudo que você falou e tentar novamente. Muito obrigado pela atenção e pela aula.

Opa! Pelo que você descreveu, grande parte do trabalho já está realizado e creio que a parte de montagem de requests/parsing/métodos já esteja bem encaminhado. Nesse caso aconselho o uso do SeleniumBase, que é praticamente uma lib que usa base Selenium mas também adiciona algumas funcionalidades extras, entre elas realizar o download de um documento intergindo com as janelas do sistema operacional. Acredito que isso resolverá a sua demanda, segue o link de alguns exemplos:

Bons estudos!

Muito obrigado! Vou estudar mais a fundo sobre e tentar resolver, obrigado pela atenção.
Obrigado pelas informações, pessoalMergulhar nas complexidades da automação web com Selenium e Python para interagir com visualizadores de PDF me traz lembranças vivas dos desafios e da satisfação de dominar novas habilidades de programação. Falando em navegação e gestão de documentos PDF durante o desenvolvimento de projetos, descobri uma ferramenta que facilitou imensamente o meu trabalho https://pdfguru.com/pt . Este site oferece uma variedade de serviços que vão desde a conversão de PDFs, algo extremamente útil quando estou lidando com a documentação de projetos ou precisando manipular arquivos PDF como parte de um script de automação. A capacidade de adaptar rapidamente os documentos às necessidades específicas do meu código sem sair do meu fluxo de trabalho tem sido uma vantagem inestimável.