python - 刮掉嵌入在.php页面中的PDF
问题描述
到目前为止,我一直在从直接显示 pdf 的页面(页面 url 以 '.pdf' 结尾)中抓取嵌入 pdf 中的文本,到目前为止没有问题(在 Python 中使用 Selenium)。但是现在我遇到了一个新批次,将 pdf 嵌入到 php 页面中。例如说页面是(不是实际页面):
然后,如果我检查页面,内容部分将如下:
<div id="content"><embed id="plugin" type="application/x-google-chrome-pdf" src="https://www.example.com/ADIR_871/civil/documentos/docu.php?valorEncTxtDmda=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczpcL1wvb2ZpY2luYWp1ZGljaWFsdmlydHVhbC5wanVkLmNsIiwiYXVkIjoiaHR0cHM6XC9cL29maWNpbmFqdWRpY2lhbHZpcnR1YWwucGp1ZC5jbCIsImlhdCI6MTYwMzQ3MzE2NSwiZXhwIjoxNjAzNDc2NzY1LCJkYXRhIjp7ImNycl9pZGRvY3VtZW50IjoiMTMyNzQ3NDQiLCJjb2RpX3RyaWJ1bmFsIjoiMjYzIiwiZW50aXBhcmNoaXZvIjoiMyJ9fQ.cB_GJ9sfSq_cvoS2-DvUBfJTesGhfcfl51gRGPvOpGg" stream-url="chrome-extension://mhjfbmdgcfjbbpaeojofohoefgiehjai/0cae9446-1142-4eb3-af15-353847788604" headers="Cache-Control: must-revalidate
Connection: close
Content-Description: File Transfer
Content-Disposition: inline; filename="Document.pdf"
Content-Transfer-Encoding: binary
Content-Type: application/pdf
Date: Fri, 23 Oct 2020 18:03:23 GMT
Expires: 0
Pragma: public
Transfer-Encoding: chunked
" background-color="0xFF525659" top-toolbar-height="56" javascript="allow" full-frame=""></div>
所以我什至无法访问源 PDF,因为 src 与我正在查看的 url 相同!
另外我不知道这是否提供了任何信息,但是当我右键单击页面并放置检查时,而不是像往常一样打开检查侧栏,检查工具栏会打开一个弹出窗口,超级奇怪。此外,如果我请求 html,我会得到一个与弹出窗口中的不同的。如果用 selenium 请求 html,我会得到这个:
<html>
<head></head>
<body style="height: 100%; width: 100%; overflow: hidden; margin:0px; background-color: rgb(82, 86, 89);">
<embed name="FD96F78861CE08FA8F7A5D67836A1B70" style="position:absolute; left: 0; top: 0;" width="100%" height="100%" src="about:blank" type="application/pdf" internalid="FD96F78861CE08FA8F7A5D67836A1B70">
</body>
</html>
这很常见吗?
PDF 只是有一些嵌入的文本。我可以在屏幕上看到它,但我不能用 Python 刮掉它,感觉很奇怪。我怎么能得到这个文本?谢谢!
解决方案
通过模拟鼠标单击全部复制并访问剪贴板来解决它,无需拥有pdf。
import mouse
from pynput.keyboard import Key, Controller
import pyperclip
mouse.click('left')
keyboard = Controller()
keyboard.press(Key.ctrl)
keyboard.press('a')
keyboard.release('a')
keyboard.release(Key.ctrl)
keyboard.press(Key.ctrl)
keyboard.press('c')
keyboard.release('c')
keyboard.release(Key.ctrl)
text = pyperclip.paste()
推荐阅读
- c# - 通过从字典访问添加委托时,事件为空
- javascript - 在javascript中围绕路径制作正弦波曲线
- python - 多线程是否有可能提取从外部源流式传输的全局变量?
- android - Android Studio Emulator:进程退出,错误代码为 1
- python-3.x - Pandas Python 如何使用一个数据帧中的通用数据写入不同的数据帧?
- mysql - MySQL SUM 长文本字段,$1.000.00 为 1000
- python - pyqt5 归一化向量
- c - C 结构数组,包含指向结构数组的指针
- javascript - 如果媒体宽度 < x 则更改 HTML
- django - 无法使用 django-filter 过滤