Intenté guardar algunos PDF de un enlace a través de PhantomJS (selenio). Entonces, me referí a este código que convierte las páginas web en pdfs. y funcionó bien cuando ejecuté exactamente el mismo código.

Entonces, tengo este pdf que quería guardar desde una URL directa y probé ese script ... no funcionó. Simplemente guarda un PDF con 1 página en blanco. Eso es todo...

Mi código :

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By


def execute(script, args):
    driver.execute('executePhantomScript', {'script': script, 'args' : args })

driver = webdriver.PhantomJS('phantomjs')

# hack while the python interface lags
driver.command_executor._commands['executePhantomScript'] = ('POST', '/session/$sessionId/phantom/execute')

driver.get('http://www.planetpublish.com/wp-content/uploads/2011/11/The_Scarlet_Letter_T.pdf')

try:
    WebDriverWait(driver, 40).until(EC.presence_of_element_located((By.ID, 'plugin')))
except Exception as TimeoutException:
    print("I waited for far too long and still couldn't fine the view.")
    pass

# set page format
# inside the execution script, webpage is "this"
pageFormat = '''this.paperSize = {format: "A4", orientation: "portrait" };'''
execute(pageFormat, [])

# render current page
render = '''this.render("test2.pdf")'''
execute(render, [])

No estoy seguro de lo que está sucediendo y por qué está sucediendo. Necesito ayuda

EDITAR: Este es solo el PDF de prueba que estaba tratando de obtener a través de Selenium. Hay otros archivos PDF que necesito obtener y ese sitio web está comprobando qué sabe Dios para decidir si es un humano o un bot. Entonces, el selenio es la única forma.

EDICIÓN 2: Entonces, aquí está el sitio web en el que estaba practicando: http://services.ecourts.gov.in/ecourtindia/cases/case_no.php?state_cd=26&dist_cd=8&appFlag=web

Seleccione "Cr Rev - Revisión penal" del menú desplegable "Tipo de caso" e ingrese cualquier número en el número de caso y año. Haga clic en "Ir".

Esto mostrará una pequeña tabla, haga clic en "ver" y debería mostrar una tabla en la página completa.

Desplácese hacia abajo a la tabla "pedidos" y debería ver "Copia del pedido". Ese es el pdf que estoy tratando de obtener. También he probado requests y no funcionó.

0
Xonshiz 4 jul. 2017 a las 10:05

3 respuestas

La mejor respuesta

Actualmente, PhantomJS y Chrome sin cabeza no admiten la descarga de un archivo. Si está de acuerdo con el navegador Chrome, consulte mi ejemplo a continuación. Encuentra elementos a y luego agrega un atributo download. Finalmente, hace clic en el enlace para descargar el archivo a la carpeta de descargas predeterminada.

import time

driver = webdriver.Chrome()
driver.get('http://www.planetpublish.com/free-ebooks/93/heart-of-darkness/')
pdfLinks = driver.find_elements_by_css_selector(".entry-content ul > li > a")
for pdfLink in pdfLinks:
    script = "arguments[0].setAttribute('download',arguments[1]);"
    driver.execute_script(script, pdfLink, pdfLink.text)
    time.sleep(1)
    pdfLink.click()
    time.sleep(3)

driver.quit()
0
Buaban 13 jul. 2017 a las 09:30

Si solo está buscando descargar archivos PDF que no están protegidos detrás de algunos JavaScript o cosas (esencialmente cosas sencillas), sugiero usar la biblioteca requests en su lugar.

import requests
url ='http://www.planetpublish.com/wp-content/uploads/2011/11/The_Scarlet_Letter_T.pdf'
r = requests.get(url)

with open('The_Scarlet_Letter_T.pdf', 'wb') as f:
    f.write(r.content)

# If large file
with requests.get(url, stream=True) as r:
    with open('The_Scarlet_Letter_T.pdf', 'wb') as f:
        for chunk in r.iter_content(chunk_size=1024):
            if chunk:
                f.write(chunk)
0
dbokers 6 jul. 2017 a las 13:11

Le recomiendo que mire la pdfkit.

import pdfkit
pdfkit.from_url('http://www.planetpublish.com/wp-content/uploads/2011/11/The_Scarlet_Letter_T.pdf', 'out.pdf')

Hace que la descarga de archivos PDF sea muy simple con Python. También deberá descargar esto para que la biblioteca funcione.

También puede probar el código desde este enlace que se muestra a continuación

#!/usr/bin/env python
from contextlib import closing
from selenium.webdriver import Firefox # pip install selenium
from selenium.webdriver.support.ui import WebDriverWait

# use firefox to get page with javascript generated content
with closing(Firefox()) as browser:
     browser.get('http://www.planetpublish.com/wp-content/uploads/2011/11/The_Scarlet_Letter_T.pdf')
     button = browser.find_element_by_name('button')
     button.click()
     # wait for the page to load
     WebDriverWait(browser, timeout=10).until(
         lambda x: x.find_element_by_id('someId_that_must_be_on_new_page'))
     # store it to string variable
     page_source = browser.page_source
print(page_source)

Que deberá editar para que funcione su pdf.

0
whackamadoodle3000 6 jul. 2017 a las 19:44