fread/readit.py
2017-07-16 12:57:11 +02:00

92 lines
2.4 KiB
Python
Executable file

#!/usr/bin/env python3
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.common.exceptions import NoSuchElementException
import argparse, multiprocessing, urllib.request, urllib.error, urllib.parse, time, os
import helpers, setuptools
def status(driver):
if '<a class="btn btn-primary clickable btn-login">Login</a>' not in driver.page_source:
return True
else:
return False
def loadPage(url, driver, period=5,init=False):
if not (init or status(driver)):
login(driver)
driver.get(url)
time.sleep(period)
return True if driver.current_url == url else False
def loginHandler(driver, user = setuptools.riuser(), password = setuptools.ripass()):
loadPage("https://app.myreadit.com/login",driver,3,True)
curfield = driver.find_element_by_name("email")
curfield.send_keys(user)
curfield = driver.find_element_by_name("password")
curfield.send_keys(password)
curfield.send_keys(Keys.RETURN)
time.sleep(3)
return status(driver)
class LoginError(Exception):
pass
def login(driver):
if not (status(driver) or loginHandler(driver)):
raise LoginError("Login failed.")
return True
def pageHandler(driver, id, page):
if not loadPage("https://app.myreadit.com/reader/%s#%i" % (id, int(page)), driver):
return False
try:
img = driver.find_element_by_tag_name("canvas")
helpers.downloadPage(img, id, page)
except:
print(driver.page_source)
driver.save_screenshot("screenshot.png")
raise
return 1 if page == 1 else 2
def magazineHandler(driver, id, makepdf = True):
if helpers.makeDir(id):
loginHandler(driver)
page = 0
val = pageHandler(driver, id, 1)
while val:
page += val
val = pageHandler(driver, id, page + 1)
if makepdf:
helpers.makePDF(id, page, helpers.PNG)
else:
print("[NOTICE] Skipping issue %s - already exists." % id)
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument("id", help="ID of the magazine to be downloaded. May be a URL.", nargs="+")
ids = parser.parse_args().id
caps = webdriver.DesiredCapabilities().PHANTOMJS.copy()
caps["phantoms.page.settings.userAgent"] = "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:54.0) Gecko/20100101 Firefox/54.0"
driver = webdriver.PhantomJS(desired_capabilities=caps, service_args=["--web-security=no"])
for id in ids:
use = id.split("/")[-1].split("#")[0]
magazineHandler(driver, use)
driver.quit()