forked from rty813/doc_downloader
-
Notifications
You must be signed in to change notification settings - Fork 0
/
doc88.py
89 lines (73 loc) · 2.88 KB
/
doc88.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.action_chains import ActionChains
from selenium.common.exceptions import NoSuchElementException
import base64
import time
import sys
import os
import shutil
from tqdm import trange
from img2pdf import conpdf
def download(url):
option = webdriver.ChromeOptions()
# option.add_argument('headless')
option.add_argument('log-level=3')
driver = webdriver.Chrome(
executable_path='.//chromedriver', chrome_options=option)
title = "output"
try:
driver.set_page_load_timeout(15)
driver.get(url)
title = driver.title
except:
print("Timeout - start download anyway.")
print(f'道客巴巴: 《{title}》')
time.sleep(5)
try:
# 展开全部
elem_cont_button = driver.find_element_by_id("continueButton")
driver.execute_script(
"arguments[0].scrollIntoView(true);", elem_cont_button)
actions = ActionChains(driver)
actions.move_to_element(elem_cont_button).perform()
time.sleep(0.5)
elem_cont_button.click()
except NoSuchElementException:
pass
# 获取页数
num_of_pages = driver.find_element_by_id('readshop').find_element_by_class_name(
'mainpart').find_element_by_class_name('shop3').find_element_by_class_name('text').get_attribute('innerHTML')
num_of_pages = int(num_of_pages.split(' ')[-1])
for i in range(5):
# 缩放
driver.find_element_by_id('zoomInButton').click()
time.sleep(0.5)
if os.path.exists(f'./temp/{title}'):
shutil.rmtree(f'./temp/{title}')
os.makedirs(f'./temp/{title}')
for pages in trange(num_of_pages):
time.sleep(0.5)
canvas_id = "page_" + str(pages + 1)
pagepb_id = "pagepb_" + str(pages + 1)
element = driver.find_element_by_id(canvas_id)
driver.execute_script("arguments[0].scrollIntoView(true);", element)
actions = ActionChains(driver)
actions.move_to_element(element).perform()
time.sleep(0.5)
# Check loading status
while(len(driver.find_element_by_id(pagepb_id).get_attribute('innerHTML')) != 0):
time.sleep(1)
# print(driver.find_element_by_id(
# pagepb_id).get_attribute('innerHTML'))
js_cmd = "var canvas = document.getElementById('{}');".format(canvas_id) + \
"return canvas.toDataURL();"
img_data = driver.execute_script(js_cmd)
img_data = (img_data[22:]).encode()
with open(f"./temp/{title}/{pages}.png", "wb") as fh:
fh.write(base64.decodebytes(img_data))
driver.quit()
print('下载完毕,正在转码')
conpdf(f'output/{title}.pdf', f'temp/{title}', '.png')