代码拉取完成,页面将自动刷新
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
import requests
from tqdm import trange
from img2pdf import conpdf
def download(url, callback):
option = webdriver.ChromeOptions()
option.add_argument('--headless')
option.add_argument('log-level=3')
driver = webdriver.Chrome(chrome_options=option)
title = "output"
try:
# driver.implicitly_wait(15)
driver.set_page_load_timeout(15)
driver.get(url)
title = driver.title
except Exception as e:
print("Timeout - start download anyway.")
return False, "下载失败,超时"
print(title)
if os.path.exists(f'./output/{title}.pdf'):
return True, title
time.sleep(5)
while True:
try:
# 展开全部
elem_cont_button = driver.find_element_by_class_name(
"banner-download")
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)
driver.find_element_by_class_name("down-arrow").click()
except Exception:
break
try:
# 获取页数
num_of_pages = driver.find_element_by_id('readshop').find_element_by_class_name(
'mainpart').find_element_by_class_name('shop3').find_elements_by_class_name('text')[-1].get_attribute('innerHTML')
num_of_pages = int(num_of_pages.split(';')[-1])
if os.path.exists(f'./temp/{title}'):
shutil.rmtree(f'./temp/{title}')
os.makedirs(f'./temp/{title}')
for pages in trange(num_of_pages):
callback(pages, num_of_pages, "正在下载:%s" % title)
try:
time.sleep(0.5)
elem = driver.find_element_by_id(f'outer_page_{pages+1}')
actions = ActionChains(driver)
actions.move_to_element(elem).perform()
img = elem.find_element_by_tag_name('img')
img_url = img.get_attribute('src')
res = requests.get(img_url)
with open(f"./temp/{title}/{pages}.gif", "wb") as fh:
fh.write(res.content)
except Exception as e:
print("下载失败,可能由于文档为收费预览文档。错误信息:\n%r" % e)
break
driver.quit()
print('下载完毕,正在转码')
callback(99, 100, "正在转码")
conpdf(f'output/{title}.pdf', f'temp/{title}', '.gif')
return True, title
except Exception as e:
return False, e
if __name__ == '__main__':
download("https://www.jinchutou.com/p-120187856.html")
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。