在我的学校,我们有一个交互式白板,我们可以将它们导出到带有提供的链接的网站。唯一的问题是链接过期了(这很愚蠢),所以我想制作一个简单的 python 脚本来获取图像并下载它们。
当我打开 chrome 并检查网站时,我看到图像包含在主分隔符中,其中包含子分隔符和图像元素,这些元素以 Base 64 编码图像。因此,很容易在 python 中解码它们。
这是我编写的用于获取 html 的简单脚本:
import requests
page = requests.get("https://air.ifpshare.com/documentPreview.html?s_id=8ec97e16-51c4-4a77-9f64-7d5dccd9bb41#/detail/561f0184-384c-4ca1-91a4-b2e687865408/record")
print(page.text)
唯一的问题是,当我尝试获取 html 时,我没有得到任何内容...... 内容似乎来自网站中的 JavaScript。
当我使用 Selenium 时也会发生同样的事情
这是我得到的:
<!DOCTYPE html><html><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no"><link rel=stylesheet href=//at.alicdn.com/t/font_833191_27456hr9ow5.css><title id=PageTitle></title><style>html,
body {
max-width: 480px;
height: 100%;
margin: auto;
background-size: 100% 100%;
background: #F8F8F8;
}</style><link href=/static/css/documentPreview.01a0856b7f615fdfd7f4b853e047bcd0.css rel=stylesheet></head><body><div id=app></div><script type=text/javascript src=/static/js/manifest.a3f705024b2774dd271e.js></script><script type=text/javascript src=/static/js/vendor.03a8b2ef6819d9eaa4e7.js></script><script type=text/javascript src=/static/js/documentPreview.a9f6fe7b5c4d6f073050.js></script></body></html>
有人知道解决方法吗?
注意:此答案包含实现目标的不同方法。
我看到您的目标 Web 应用程序从 API 端点获取图像下载 URL,并且使用请求库和少量代码可以轻松获取这些图像(如果需要,无需使用 bs4)。
这是 API 端点
https://air.ifpshare.com/api/pub/files/UUID
https://air.ifpshare.com/documentPreview.html?s_id=8ec97e16-51c4-4a77-9f64-7d5dccd9bb41#/detail/561f0184-384c-4ca1-91a4-b2e687865408/record
/detail/
路径之后,您将看到一个 UUID
值,嗯,这是您的文件 UUID
,现在将此文件 UUID 与 API 端点合并,您将从 JSON 响应中获取
downloadUrl
值,这是完整的下载 URL,以下是代码:
import requests
def fetchResp(UUID):
n = 0
url = f"https://air.ifpshare.com/api/pub/files/{UUID}"
response = requests.get(url)
items = response.json()['items']
for urls in items:
image = urls['downloadUrl']
image_url = f"https:{image}" #missing HTTP in the response value so added this manually
n = n + 1
image_data = requests.get(image_url).content
with open(f"image-{n}.png", 'wb') as image_d:
image_d.write(image_data)
fetchResp('561f0184-384c-4ca1-91a4-b2e687865408') #file UUID is here