import time
import base64
from PIL import Image
from io import BytesIO
from urllib.request import urlretrieve
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
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains


driver = webdriver.Firefox()
driver.get("https://m...content-available-to-author-only...o.jp/viewer/1007477")  # Open chapter

settings = WebDriverWait(driver, 10).until(EC.presence_of_element_located(
    (By.XPATH, "//div[starts-with(@class, 'Navigation-module_settingsContainer_')]")))  # Find settings button with wait
settings.click()  # Open settings
driver.find_elements_by_xpath("//div[starts-with(@class, 'Modal-module_quarity_')]")[2].click()  # Set image quality
settings.click()  # Open settings again
driver.execute_script('document.querySelector("input#mode-horizontal").removeAttribute("disabled")')  # Endble horizontal if it disabled
driver.execute_script('document.querySelector("input#mode-horizontal").click()')  # Turn into horizontal mode



title = WebDriverWait(driver, 10).until(EC.presence_of_element_located(
    (By.XPATH, '/html/body/div/div[2]/div[2]/div[3]/div[1]/div[2]/a/h1'))).text  # Wait for page load after refresh
chapter = driver.find_element_by_xpath('/html/body/div/div[2]/div[2]/div[3]/div[1]/div[2]/div/p').text[1:]
time.sleep(2)

img = driver.find_element_by_class_name('zao-image')



b64 = driver.execute_script('''function getBase64Image(img) 
    {
        var canvas = document.createElement("canvas");
        canvas.width = img.width;
        canvas.height = img.height;
        var ctx = canvas.getContext("2d");
        ctx.drawImage(img, 0, 0);
        var dataURL = canvas.toDataURL("image/png");
        return dataURL.replace(/^data:image\/(png|jpg);base64,/, "");
    }
    return getBase64Image(arguments[0])
    ''',
                            img)
image_data = base64.b64decode(b64)

with open('pic.png', 'wb') as f:
    f.write(image_data)

