Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

1.2K
Views
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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!