Advertisement
KeplerBR

bvubot

Mar 19th, 2015
294
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.29 KB | None | 0 0
  1. #coding utf-8
  2.  
  3. import os
  4. import argparse
  5. import urllib
  6. from selenium import webdriver
  7. from selenium.webdriver.common.keys import Keys
  8. from fpdf import FPDF
  9. from PIL import Image
  10.  
  11. # Checar argumentos
  12. parser = argparse.ArgumentParser()
  13. parser.add_argument('--login', '-l', required=True,
  14.                     help='Login para acessar o BVU (apenas numeros)')
  15. parser.add_argument('--book', '-b', required=True, nargs='+',
  16.                     help='ID do livro que será baixado.'
  17.                         'Para descobrir qual o ID do livro que deseja baixar, acesse-o no navegador'
  18.                         'e veja na barra de endereco os numeros apos o \'publications\'')
  19. args = parser.parse_args()
  20.  
  21. # Variável global
  22. driver = webdriver.PhantomJS()
  23.  
  24. # Realiza o login
  25. # Retorna True em caso de sucesso, False em caso de falha
  26. def login(user):
  27.     driver.get("http://bvu.ifce.edu.br/login.php")
  28.     driver.find_element_by_id('Login').send_keys(user, Keys.ENTER)
  29.     if (driver.current_url == "http://ifcefortaleza.bv3.digitalpages.com.br/users/publications"):
  30.         return(True)
  31.     else:
  32.         return(False)
  33.  
  34. # Realiza o download de um determinado livro
  35. def downloadBook(id):
  36.     print("Começando download do livro de ID ", id, "...", sep="")
  37.  
  38.     if (not os.path.exists(id)):
  39.         os.makedirs(id)
  40.  
  41.     driver.get("http://ifcefortaleza.bv3.digitalpages.com.br/users/publications/" + str(id))
  42.  
  43.     numberTotalPages = 6#driver.execute_script("return RDP.options.pageSetLength") - 2
  44.     print("Total de páginas: ", numberTotalPages)
  45.  
  46.     srcPage1 = driver.execute_script("return $('.backgroundImg')[0].src")
  47.     urllib.request.urlretrieve(srcPage1, str(id) + "\\0.jpg")
  48.     print("Capa...")
  49.  
  50.     checkPage1 = srcPage1
  51.     srcPage2 = ""
  52.     checkPage2 = ""
  53.  
  54.     # esperar o elemento correspodente da pagina à direita ser criada
  55.     driver.execute_script("navigate.next_page()")
  56.     page2Exist = 0
  57.     while (page2Exist == 0):
  58.         page2Exist = driver.execute_script("if ($('.backgroundImg')[1]) {"
  59.                                                 "return 1"
  60.                                             "} else {"
  61.                                                  "return 0"
  62.                                             "}")
  63.  
  64.     # loop para baixar cada pagina do livro
  65.     for i in range(1, numberTotalPages, 2):
  66.         # loop para esperar as imagens serem atualizadas
  67.         while (srcPage1 == checkPage1 or srcPage2 == checkPage2):
  68.             srcPage1 = driver.execute_script("return $('.backgroundImg')[0].src")
  69.             srcPage2 = driver.execute_script("return $('.backgroundImg')[1].src")
  70.  
  71.         urllib.request.urlretrieve(srcPage1, str(id) + "\\" + str(i) + ".jpg")
  72.         urllib.request.urlretrieve(srcPage2, str(id) + "\\" + str(i + 1) + ".jpg")
  73.         checkPage1 = srcPage1
  74.         checkPage2 = srcPage2
  75.         driver.execute_script("navigate.next_page()")
  76.         print(i, '/', numberTotalPages, '...', sep="")
  77.  
  78.     makePdf(id, range(numberTotalPages + 1), dir = str(id))
  79.  
  80. def makePdf(pdfFileName, listPages, dir = ''):
  81.     if (dir):
  82.         dir += "/"
  83.  
  84.     cover = Image.open(dir + str(listPages[0]) + ".jpg")
  85.     width, height = cover.size
  86.  
  87.     pdf = FPDF(unit = "pt", format = [width, height])
  88.  
  89.     for page in listPages:
  90.         pdf.add_page()
  91.         pdf.image(dir + str(page) + ".jpg", 0, 0)
  92.  
  93.     pdf.output(dir + pdfFileName + ".pdf", "F")
  94.  
  95. #
  96. print("Efetuando login com ", args.login, "...", sep="")
  97. if (login(args.login)):
  98.     print("Login efetuado com sucesso!")
  99.     for currentBook in args.book:
  100.         downloadBook(currentBook)
  101. else:
  102.     driver.save_screenshot('erro.png')
  103.     print("Erro ao logar! Verifique a imagem 'erro.png'")
  104.  
  105. driver.quit()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement