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

196
Views
Cómo hacer que Python raspe la página web generada por archivos JavaScript

Tengo un sitio web en el que quiero automatizar algunas acciones, pero la página está generada por 2 archivos JavaScript y está definida así en el html:

 <script src="/build/runtime.js"></script><script src="/build/app.js"></script>

runtime.js tiene unas 70 líneas y app.js tiene unas 40k líneas... No tengo idea de cómo leer el código ya que no sé nada de JavaScript y mi conocimiento de Pyton es un mero átomo más;)

Compartiría el sitio en particular, pero la página está detrás de un inicio de sesión. Entonces logré llegar a la página usando 2 métodos diferentes, pero no puedo encontrar una manera de presionar los botones dentro de esta siguiente página generada por el JS.

Método 1: Solicitudes y BeautifulSoup, pero se quedó atascado en el bit JS, por lo que cambió al método 2.

 import requests from bs4 import BeautifulSoup # Site & creds LOGIN_URL = 'https://website.com/login' USERNAME = 'user' PASSWORD = 'pass' # Pretend to be browser headers = { 'accept': 'text/html,application/xhtml+xml,application/xml', 'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36' } # Start session session = requests.session() # Get login page response = session.get(LOGIN_URL, headers=headers, verify=False) # Get csrf token soup = BeautifulSoup(response.content, 'html.parser') csrf_token = (soup.find(id="login_form__token")["value"]) # Set creds with csfr token payload = { 'login_form[username]': USERNAME, 'login_form[password]': PASSWORD, 'login_form[login]': '', 'login_form[_token]': csrf_token } # Login & do something else with cookies I don't understand response = session.post(LOGIN_URL, data=payload, verify=False) response = session.get('https://website.com/pageIWant', verify=False) soup = BeautifulSoup(response.content, 'html.parser') print(soup.prettify())

Método 2 - Selenio y ChromeDriver

 from selenium import webdriver from selenium.webdriver.chrome.options import Options from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By options = Options() options.headless = True options.add_argument("--window-size=1920,1200") options.add_argument('--disable-gpu') options.add_argument('--disable-software-rasterizer') driver = webdriver.Chrome(options=options, executable_path='chromedriver.exe') driver.get("https://website.com/login") driver.find_element_by_id("login_form_username").send_keys('user') driver.find_element_by_id("login_form_password").send_keys('pass') driver.find_element_by_id("login_form_login").click() driver.get("https://website.com/pageIWant") html = driver.page_source print(html)

Así que pensé que el método 2 facilitaría las cosas, pero prácticamente me quedé estancado en el mismo punto. La página generada que quiero contiene botones que necesitaría presionar para acceder a las páginas posteriores. Lea mucho sobre cómo acceder a los elementos, pero no puede ver nada dentro de este valor de 40k de JS jibberish. ¿Dónde es un buen lugar para empezar?

about 4 years ago · Santiago Gelvez
1 answers
Answer question

0

"¿Dónde es un buen lugar para empezar?"

Independientemente de cómo se genere la página (HTML o JS), en última instancia, lo que debe abordar en Selenium es el DOM en vivo de la página. Entonces, "dónde comenzar" es inspeccionar el DOM de la página en las herramientas de desarrollo del navegador y, desde el DOM, descubrir cómo encontrar los elementos del botón en Selenium.

about 4 years ago · Santiago Gelvez 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!