Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

1.2K
Visualizações
Selenium: ¿Cómo inyectar/ejecutar un Javascript en una página antes de cargar/ejecutar cualquier otro script de la página?

Estoy usando selenium python webdriver para navegar por algunas páginas. Quiero inyectar un código JavaScript en una página antes de que se carguen y ejecuten otros códigos Javascript. Por otro lado, necesito que mi código JS se ejecute como el primer código JS de esa página. ¿Hay alguna manera de hacer eso con Selenium?

Lo busqué en Google durante un par de horas, ¡pero no pude encontrar ninguna respuesta adecuada!

over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

Selenium ahora es compatible con la API de Chrome Devtools Protocol (CDP), por lo que es realmente fácil ejecutar un script en cada carga de página. Aquí hay un código de ejemplo para eso:

 driver.execute_cdp_cmd('Page.addScriptToEvaluateOnNewDocument', {'source': 'alert("Hooray! I did it!")'})

Y ejecutará ese script para CADA carga de página. Más información sobre esto se puede encontrar en:

  • Documentación de Selenium: https://www.selenium.dev/documentation/en/support_packages/chrome_devtools/
  • Documentación del protocolo Chrome Devtools: https://chromedevtools.github.io/devtools-protocol/tot/Page/#method-addScriptToEvaluateOnNewDocument
over 4 years ago · Santiago Trujillo Relatório

0

Desde la versión 1.0.9, selenium-wire ha ganado la funcionalidad de modificar las respuestas a las solicitudes. A continuación se muestra un ejemplo de esta funcionalidad para inyectar un script en una página antes de que llegue a un navegador web.

 import os from seleniumwire import webdriver from gzip import compress, decompress from urllib.parse import urlparse from lxml import html from lxml.etree import ParserError from lxml.html import builder script_elem_to_inject = builder.SCRIPT('alert("injected")') def inject(req, req_body, res, res_body): # various checks to make sure we're only injecting the script on appropriate responses # we check that the content type is HTML, that the status code is 200, and that the encoding is gzip if res.headers.get_content_subtype() != 'html' or res.status != 200 or res.getheader('Content-Encoding') != 'gzip': return None try: parsed_html = html.fromstring(decompress(res_body)) except ParserError: return None try: parsed_html.head.insert(0, script_elem_to_inject) except IndexError: # no head element return None return compress(html.tostring(parsed_html)) drv = webdriver.Firefox(seleniumwire_options={'custom_response_handler': inject}) drv.header_overrides = {'Accept-Encoding': 'gzip'} # ensure we only get gzip encoded responses

En general, otra forma de controlar un navegador de forma remota y poder inyectar un script antes de que se cargue el contenido de las páginas sería usar una biblioteca basada en un protocolo completamente separado, por ejemplo: Chrome DevTools Protocol. El más destacado que conozco es dramaturgo .

over 4 years ago · Santiago Trujillo Relatório

0

Si desea inyectar algo en el html de una página antes de que el navegador lo analice y lo ejecute, le sugiero que use un proxy como Mitmproxy .

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda