Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

240
Vistas
¿Cómo obtener la única URL de PDF de la página web?

Estoy tratando de obtener algunos elementos DOM usando Selenium y estoy haciendo todo esto usando Java, pero recibo este error cuando lo pruebo:

 Exception in thread "main" org.openqa.selenium.StaleElementReferenceException: stale element reference: element is not attached to the page document

Todavía soy un novato en todo esto, pero el código que estoy usando para recuperar el elemento DOM es:

 driver.get("https://www.qp.alberta.ca/570.cfm?frm_isbn=9780779808571&search_by=link"); String pagePdfUrl = driver.findElement(By.xpath("//img[@alt='View PDF']//..//parent::a")).getAttribute("href");

Creo que el error es que no puede encontrar el XPath dado aunque este xpath existe. Cualquier ayuda sería apreciada.

Gracias.

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

  • Hay un atributo href que tiene una URL de pdf, pero esa URL abre el pdf dentro de la página web.

  • Así que extraje la URL del pdf del atributo href y obtuve el nombre del pdf que luego concatené con https://www.qp.alberta.ca/documents/Acts/ URL.

Puede escribir el código como se muestra a continuación para obtener la URL del pdf.

Código para obtener la URL del PDF :

 driver = new ChromeDriver(); /*I hard coded below URL. You need parameterize based on your requirement.*/ driver.get("https://www.qp.alberta.ca/570.cfm?frm_isbn=9780779808571&search_by=link"); String pagePdfUrl = driver.findElement(By.xpath("//img[@alt='View PDF']//..//parent::a")).getAttribute("href"); System.out.println("Page PDF URL: " + pagePdfUrl); String pdfName = StringUtils.substringBetween(pagePdfUrl, "page=", ".cfm&"); driver.get("https://www.qp.alberta.ca/documents/Acts/" + pdfName + ".pdf");

Código para descargar PDF :

ChromOptions requeridas:

 ChromeOptions options = new ChromeOptions(); HashMap<String, Object> chromeOptionsMap = new HashMap<String, Object>(); chromeOptionsMap.put("plugins.plugins_disabled", new String[] { "Chrome PDF Viewer" }); chromeOptionsMap.put("plugins.always_open_pdf_externally", true); chromeOptionsMap.put("download.default_directory", "C:\\Users\\Downloads\\test\\"); options.setExperimentalOption("prefs", chromeOptionsMap); options.addArguments("--headless");

Acceso a PDF:

 driver = new ChromeDriver(options); driver.get("https://www.qp.alberta.ca/570.cfm?frm_isbn=9780779808571&search_by=link"); String pagePdfUrl = driver.findElement(By.xpath("//img[@alt='View PDF']//..//parent::a")).getAttribute("href"); System.out.println("Page PDF URL: " + pagePdfUrl); String pdfName = StringUtils.substringBetween(pagePdfUrl, "page=", ".cfm&"); System.out.println("Only PDF URL: "+"https://www.qp.alberta.ca/documents/Acts/" + pdfName + ".pdf"); driver.get("https://www.qp.alberta.ca/documents/Acts/" + pdfName + ".pdf");

Salida :

 Page PDF URL: https://www.qp.alberta.ca/1266.cfm?page=2017ch18_unpr.cfm&leg_type=Acts&isbncln=9780779808571 Only PDF URL: https://www.qp.alberta.ca/documents/Acts/2017ch18_unpr.pdf

Importar para StringUtils :

 import org.apache.commons.lang3.StringUtils;
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda