{"id":409,"date":"2026-06-23T21:29:42","date_gmt":"2026-06-23T21:29:42","guid":{"rendered":"https:\/\/wordpress-foccwcs4gooocs44ogwkggo0.thunderproxy.com\/?p=409"},"modified":"2026-06-23T21:29:42","modified_gmt":"2026-06-23T21:29:42","slug":"como-usar-selenium-y-python-para-web-scraping","status":"publish","type":"post","link":"https:\/\/wordpress-foccwcs4gooocs44ogwkggo0.thunderproxy.com\/index.php\/es\/2026\/06\/23\/como-usar-selenium-y-python-para-web-scraping\/","title":{"rendered":"Como usar Selenium y Python para web scraping"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Recopilar datos de sitios web, com\u00fanmente conocido como web scraping, es una t\u00e9cnica pr\u00e1ctica para muchos proyectos. Bibliotecas como BeautifulSoup son excelentes para trabajar con HTML b\u00e1sico; sin embargo, a menudo tienen dificultades cuando las p\u00e1ginas dependen en gran medida de JavaScript para mostrar contenido. Ah\u00ed es donde entra&nbsp;<strong>Selenium<\/strong>&nbsp;para resolverlo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En esta gu\u00eda, aprender\u00e1s c\u00f3mo usar Selenium con Python para extraer datos de sitios web de forma efectiva.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Lo primero: \u00bfqu\u00e9 es Selenium?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Selenium es un framework de automatizaci\u00f3n de navegadores dise\u00f1ado para probar aplicaciones web. Simula el comportamiento real del usuario controlando un navegador real como Chrome o Firefox. Gracias a esto, puede manejar contenido renderizado con JavaScript que otras herramientas no pueden.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Esto convierte a Selenium en una excelente soluci\u00f3n para extraer contenido de sitios web interactivos, formularios, scroll infinito y m\u00e1s.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">C\u00f3mo instalar Selenium<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Para empezar, instala Selenium con pip:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><code>pip install selenium<br><\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">C\u00f3mo configurar un WebDriver<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Selenium requiere un WebDriver para comunicarse con el navegador. Aqu\u00ed tienes un ejemplo sencillo usando Chrome:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><code>from selenium import webdriver<br>from selenium.webdriver.chrome.service import Service<br><br>service = Service(\"\/path\/to\/chromedriver\")<br>driver = webdriver.Chrome(service=service)<br><\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Si quieres ejecutar el navegador sin abrir una ventana (\u00fatil en servidores), activa el modo headless:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><code>from selenium.webdriver.chrome.options import Options<br><br>options = Options()<br>options.add_argument(\"--headless=new\")<br>driver = webdriver.Chrome(options=options)<br><\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">C\u00f3mo encontrar elementos en la p\u00e1gina<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Puedes usar distintas estrategias para localizar elementos HTML:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><code>from selenium.webdriver.common.by import By<br><br>element = driver.find_element(By.CLASS_NAME, \"product-title\")<br><\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Otras opciones de localizador son:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>By.ID<\/code><\/li>\n\n\n\n<li><code>By.TAG_NAME<\/code><\/li>\n\n\n\n<li><code>By.CSS_SELECTOR<\/code><\/li>\n\n\n\n<li><code>By.XPATH<\/code><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Esperar a que JavaScript cargue<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">En lugar de usar&nbsp;<code>time.sleep()<\/code>, Selenium admite esperas inteligentes con&nbsp;<code>WebDriverWait<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><code>from selenium.webdriver.support.ui import WebDriverWait<br>from selenium.webdriver.support import expected_conditions as EC<br><br>WebDriverWait(driver, 10).until(<br>    EC.presence_of_element_located((By.ID, \"content\"))<br>)<br><\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Ejecutar JavaScript<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Si necesitas desplazarte por la p\u00e1gina o activar elementos que cargan mal, puedes ejecutar JavaScript:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><code>driver.execute_script(\"window.scrollTo(0, document.body.scrollHeight);\")<br><\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">C\u00f3mo tomar capturas de pantalla<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Captura una captura de pantalla de la vista actual con:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><code>driver.save_screenshot(\"screenshot.png\")<br><\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Manejar la paginaci\u00f3n<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Para extraer datos de varias p\u00e1ginas, puedes recorrer enlaces o interactuar con un bot\u00f3n &#8220;Siguiente&#8221;:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><code>next_button = driver.find_element(By.LINK_TEXT, \"Next\")<br>next_button.click()<br><\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Exportar datos<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Puedes usar la biblioteca Pandas para guardar los datos extra\u00eddos en un archivo CSV:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><code>import pandas as pd<br><br>df = pd.DataFrame(data)<br>df.to_csv(\"output.csv\", index=False)<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Desplazarse con teclas<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Para simular pulsaciones de teclas como&nbsp;<code>PAGE_DOWN<\/code>&nbsp;o&nbsp;<code>END<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><code>from selenium.webdriver.common.keys import Keys<br><br>body = driver.find_element(By.TAG_NAME, \"body\")<br>body.send_keys(Keys.END)<br><\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Bloquear im\u00e1genes y otros recursos<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Para acelerar el scraping y reducir el uso de recursos:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><code>driver.execute_cdp_cmd(\"Network.setBlockedURLs\", {\"urls\": [\"*.jpg\", \"*.png\"]})<br><\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\u00bfC\u00f3mo se compara Selenium con otras herramientas?<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Herramienta<\/th><th>Soporte JavaScript<\/th><th>Velocidad<\/th><th>Caso de uso ideal<\/th><\/tr><\/thead><tbody><tr><td>Selenium<\/td><td>Completo<\/td><td>Moderada<\/td><td>P\u00e1ginas interactivas\/din\u00e1micas<\/td><\/tr><tr><td>BeautifulSoup<\/td><td>Ninguno<\/td><td>R\u00e1pida<\/td><td>Scraping de HTML est\u00e1tico<\/td><\/tr><tr><td>Scrapy<\/td><td>Opcional (a trav\u00e9s de Selenium)<\/td><td>Muy r\u00e1pida<\/td><td>Proyectos de scraping a gran escala<\/td><\/tr><tr><td>Puppeteer<\/td><td>Completo (solo Node.js)<\/td><td>Moderada<\/td><td>Scraping basado en Chromium headless<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">\u00bfCu\u00e1ndo deber\u00edas usar Selenium?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Elige Selenium cuando:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>El sitio web depende principalmente de JavaScript<\/li>\n\n\n\n<li>Necesitas simular interacciones de usuario (clics, scroll e inputs)<\/li>\n\n\n\n<li>Est\u00e1s trabajando en una tarea de scraping a peque\u00f1a o mediana escala<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Para trabajos de scraping m\u00e1s grandes o m\u00e1s r\u00e1pidos, considera herramientas como <a href=\"https:\/\/www.scrapy.org\">Scrapy<\/a>, o APIs especializadas que se encargan de los <a href=\"https:\/\/thunderproxy.com\/es\/products\/proxies\/residential-proxies\/\">proxies residenciales<\/a>, CAPTCHA y JavaScript por ti.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusi\u00f3n<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Selenium es una opci\u00f3n perfecta para extraer datos de sitios web din\u00e1micos con Python. Tras configurarlo, te permite extraer contenido de p\u00e1ginas complejas. Aunque no es la herramienta m\u00e1s r\u00e1pida, su capacidad para automatizar un navegador real lo hace incre\u00edblemente flexible.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Aprende a extraer datos de sitios web din\u00e1micos usando Selenium con Python. Esta gu\u00eda cubre la configuraci\u00f3n, selecci\u00f3n de elementos, manejo de JavaScript, paginaci\u00f3n y exportaci\u00f3n de datos.<\/p>\n","protected":false},"author":1,"featured_media":117,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"meta_title":"Web Scraping con Selenium y Python","meta_description":"Extrae datos de sitios web din\u00e1micos con Selenium y Python. Cubre configuraci\u00f3n, selecci\u00f3n de elementos, manejo de JavaScript, paginaci\u00f3n y exportaci\u00f3n de datos.","plan_title":"","referenced_products":[],"footnotes":""},"categories":[23],"tags":[50],"class_list":["post-409","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized-es","tag-tutorials"],"tag_slugs":["tutorials"],"meta_title":"Web Scraping con Selenium y Python","meta_description":"Extrae datos de sitios web din\u00e1micos con Selenium y Python. Cubre configuraci\u00f3n, selecci\u00f3n de elementos, manejo de JavaScript, paginaci\u00f3n y exportaci\u00f3n de datos.","referenced_products":[],"plan_title":"","headings":[{"level":2,"text":"Lo primero: \u00bfqu\u00e9 es Selenium?","id":"lo-primero-que-es-selenium","slug":"lo-primero-que-es-selenium"},{"level":2,"text":"C\u00f3mo instalar Selenium","id":"como-instalar-selenium","slug":"como-instalar-selenium"},{"level":2,"text":"C\u00f3mo configurar un WebDriver","id":"como-configurar-un-webdriver","slug":"como-configurar-un-webdriver"},{"level":2,"text":"C\u00f3mo encontrar elementos en la p\u00e1gina","id":"como-encontrar-elementos-en-la-pagina","slug":"como-encontrar-elementos-en-la-pagina"},{"level":2,"text":"Esperar a que JavaScript cargue","id":"esperar-a-que-javascript-cargue","slug":"esperar-a-que-javascript-cargue"},{"level":2,"text":"Ejecutar JavaScript","id":"ejecutar-javascript","slug":"ejecutar-javascript"},{"level":2,"text":"C\u00f3mo tomar capturas de pantalla","id":"como-tomar-capturas-de-pantalla","slug":"como-tomar-capturas-de-pantalla"},{"level":2,"text":"Manejar la paginaci\u00f3n","id":"manejar-la-paginacion","slug":"manejar-la-paginacion"},{"level":2,"text":"Exportar datos","id":"exportar-datos","slug":"exportar-datos"},{"level":2,"text":"Desplazarse con teclas","id":"desplazarse-con-teclas","slug":"desplazarse-con-teclas"},{"level":2,"text":"Bloquear im\u00e1genes y otros recursos","id":"bloquear-imagenes-y-otros-recursos","slug":"bloquear-imagenes-y-otros-recursos"},{"level":2,"text":"\u00bfC\u00f3mo se compara Selenium con otras herramientas?","id":"como-se-compara-selenium-con-otras-herramientas","slug":"como-se-compara-selenium-con-otras-herramientas"},{"level":2,"text":"\u00bfCu\u00e1ndo deber\u00edas usar Selenium?","id":"cuando-deberias-usar-selenium","slug":"cuando-deberias-usar-selenium"},{"level":2,"text":"Conclusi\u00f3n","id":"conclusion","slug":"conclusion"}],"lang":"es","translations":{"es":409,"en":81,"ru":406,"tr":407,"de":408},"pll_sync_post":[],"featured_media_src_url":"https:\/\/wordpress-foccwcs4gooocs44ogwkggo0.thunderproxy.com\/wp-content\/uploads\/2025\/07\/How-To-Use-Selenium-and-Python-for-Web-Scraping-1024x683.jpg","_links":{"self":[{"href":"https:\/\/wordpress-foccwcs4gooocs44ogwkggo0.thunderproxy.com\/index.php\/wp-json\/wp\/v2\/posts\/409","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress-foccwcs4gooocs44ogwkggo0.thunderproxy.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress-foccwcs4gooocs44ogwkggo0.thunderproxy.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress-foccwcs4gooocs44ogwkggo0.thunderproxy.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress-foccwcs4gooocs44ogwkggo0.thunderproxy.com\/index.php\/wp-json\/wp\/v2\/comments?post=409"}],"version-history":[{"count":1,"href":"https:\/\/wordpress-foccwcs4gooocs44ogwkggo0.thunderproxy.com\/index.php\/wp-json\/wp\/v2\/posts\/409\/revisions"}],"predecessor-version":[{"id":429,"href":"https:\/\/wordpress-foccwcs4gooocs44ogwkggo0.thunderproxy.com\/index.php\/wp-json\/wp\/v2\/posts\/409\/revisions\/429"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress-foccwcs4gooocs44ogwkggo0.thunderproxy.com\/index.php\/wp-json\/wp\/v2\/media\/117"}],"wp:attachment":[{"href":"https:\/\/wordpress-foccwcs4gooocs44ogwkggo0.thunderproxy.com\/index.php\/wp-json\/wp\/v2\/media?parent=409"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress-foccwcs4gooocs44ogwkggo0.thunderproxy.com\/index.php\/wp-json\/wp\/v2\/categories?post=409"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress-foccwcs4gooocs44ogwkggo0.thunderproxy.com\/index.php\/wp-json\/wp\/v2\/tags?post=409"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}