Verificar requisição de página em um programa de scraping

123 views
Skip to first unread message

Murilo Negrao

unread,
Oct 3, 2023, 5:10:26 PM10/3/23
to Python Brasil
Boa tarde,

Estou fazendo um programa de scraping em um sistema interno mesmo. Muitas vezes precisamos fazer uma requisição em uma página e verificar se não tem nenhum resultado.

Já verifiquei todos os elementos da página, e nada muda.
Quando a resposta é negativa, a única coisa que altera é:
- Inspecionar -> Network

Nesse caso, muda a "Request URL"

Para fazer isso estou usando o Selenium Webdriver. Por essa biblioteca não consigo verificar a "Request URL". E se inicio a aplicação com o Selenium Webdriver, não consigo fazer isso com outra biblioteca.

O Seleniumwire não funciona.

Já pesquisei no Google, Bard, ChatGPT e ainda não consegui uma solução.

Se alguém puder me ajudar com uma luz, por favor.

Obrigado!!!!

Andras Pataki

unread,
Oct 3, 2023, 5:17:20 PM10/3/23
to python...@googlegroups.com
Boa tarde Murilo,
Acredito que seja importante colocar mais informações a respeito da sua dúvida, está complicado para entender o problema com clareza. 
Além disso, responda por favor a seguinte questão:
É possível realizar a solicitação manualmente? (Através de script Python ou Postman)
Você está visitando um único endereço conhecido, ou ele é dinâmico? (dinâmico =  link diferente para cada caso)
Ao fazer a requisição, qual o código de resposta? O conteúdo (body) é completamente nulo? 
Enfim, agradeço se puder reformular e oferecer as respostas. Tenha uma boa tarde.


--
--
------------------------------------
Grupo Python-Brasil
https://wiki.python.org.br/AntesDePerguntar
 
<*> Para visitar o site do grupo na web, acesse:
http://groups.google.com/group/python-brasil
 
<*> Para sair deste grupo, envie um e-mail para:
python-brasi...@googlegroups.com
---
Você recebeu essa mensagem porque está inscrito no grupo "Python Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para python-brasi...@googlegroups.com.
Para ver essa discussão na Web, acesse https://groups.google.com/d/msgid/python-brasil/35750d63-2ee6-4463-a79e-4ee79577dbc9n%40googlegroups.com.

Moisés Abel

unread,
Oct 4, 2023, 7:03:12 AM10/4/23
to Python Brasil
Bom dia Murilo,

Bom, não sei se entendi ou qual a complexidade das suas necessidades, porém tem 3 formas de fazer isso, não sei a qual lhe serviria,
1 - Você pode usar uma ferramenta de proxy, segue:
pip install browsermob-proxy
from selenium import webdriver
from browsermobproxy import Server

# Iniciar o BrowserMob Proxy
server = Server("/caminho/para/browsermob-proxy")
server.start()
proxy = server.create_proxy()

# Configurar o WebDriver para usar o proxy
proxy_url = proxy.proxy
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument(f'--proxy-server={proxy_url}')
driver = webdriver.Chrome(chrome_options=chrome_options)

# Iniciar a captura de solicitações
proxy.new_har("sua_pagina")

# Abrir a página que você deseja verificar
driver.get("URL_da_pagina")

# Realize ações com o WebDriver, como clicar em botões ou preencher formulários

# Encerrar a captura
har = proxy.har

# Analisar as solicitações capturadas
for entry in har['log']['entries']:
    request_url = entry['request']['url']
    print(request_url)

# Encerrar o WebDriver e o BrowserMob Proxy
driver.quit()
server.stop()

2 - Você pode usar as ferramentas de desenvolvedor do seu próprio navegador:
Neste caso, você pode abrir as ferramentas de desenvolvedor do navegador manualmente (geralmente pressionando F12) e acessar a guia "Network" para monitorar as solicitações HTTP em tempo real. Não é necessário código Python para isso, pois as ferramentas do navegador fornecem essa funcionalidade diretamente.

3 - Usar o JavaScript juntamente com o Selenium Webdriver:
from selenium import webdriver

driver = webdriver.Chrome()
driver.get("URL_da_pagina")

# Injetar um script JavaScript na página
script = """
    (function() {
        var xhrOpen = XMLHttpRequest.prototype.open;
        XMLHttpRequest.prototype.open = function() {
            console.log('URL da solicitação: ', arguments[1]);
            xhrOpen.apply(this, arguments);
        };
    })();
"""
driver.execute_script(script)

# Realize ações com o WebDriver, como clicar em botões ou preencher formulários

# O JavaScript injetado registrará as URLs das solicitações no console do navegador

# Encerrar o WebDriver
driver.quit()

Sem mais, espero ter ajudado.

Moisés Abel

Murilo Negrao

unread,
Oct 4, 2023, 8:23:19 AM10/4/23
to Python Brasil
Bom dia pessoal...

Primeiro obrigado pela resposta, já estou tentando implementar a sugestão do Moisés Abel, até estava dando uma olhada na documentação da biblioteca. Assim que der certo, aviso aqui.

Quanto à dúvida do Andras Pataki, é o seguinte. Tenho uma página, que tem um formulário e um botão para fazer uma consulta.

Quando a consulta retorna resultado aparece uma tabela. Mas se a consulta não retorna nenhum resultado, não há nenhuma mudança na página. Nenhum elemento, nada me falando que a consulta retornou negativa.

O único elemento que eu identifiquei foi no Inspecionar -> Network, que muda a "url request" e os elementos de rede apenas. Nada muda no DOM, na identificação do navegador. Tudo fica da mesma forma.

Como o servidor é lento e eu estou trabalhando com um robô de automação para coisas do meu trabalho mesmo, o meu medo é o servidor demorar a responder e o RPA identificar que não tem retorno, e eu ficar sem as informações que eu preciso.

Por isso eu queria um elemento que eu tivesse certeza de que, se ele mudou, mas a página não, é porque a resposta de fato é negativa e eu posso continuar a automação.

Obrigado pela ajuda, pessoal!!!!

Eric Chiesse

unread,
Oct 4, 2023, 10:24:26 AM10/4/23
to python...@googlegroups.com
A url de request vc já deveria ter pois é a que vc passa para `driver.get`

Para pegar o endereço real da página onde vc está vc pode usar `driver.current_url`
---
Eric Chiesse


Eric Chiesse

unread,
Oct 4, 2023, 10:29:33 AM10/4/23
to python...@googlegroups.com
A propósito, se tudo que vc quer é fazer scrapping, o selenium não é a melhor opção.

O pessoal gosta de usar scrappy ou beautifulsoup.

Eu já gosto de usar `requests` + `lxml`

---
Eric

Reply all
Reply to author
Forward
0 new messages