首页 > 解决方案 > 刮掉嵌入在.php页面中的PDF

问题描述

到目前为止,我一直在从直接显示 pdf 的页面(页面 url 以 '.pdf' 结尾)中抓取嵌入 pdf 中的文本,到目前为止没有问题(在 Python 中使用 Selenium)。但是现在我遇到了一个新批次,将 pdf 嵌入到 php 页面中。例如说页面是(不是实际页面):

https://www.example.com/ADIR_871/civil/documentos/docu.php?valorEncTxtDmda=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczpcL1wvb2ZpY2luYWp1ZGljaWFsdmlydHVhbC5wanVkLmNsIiwiYXVkIjoiaHR0cHM6XC9cL29maWNpbmFqdWRpY2lhbHZpcnR1YWwucGp1ZC5jbCIsImlhdCI6MTYwMzQ3MzE2NSwiZXhwIjoxNjAzNDc2NzY1LCJkYXRhIjp7ImNycl9pZGRvY3VtZW50IjoiMTMyNzQ3NDQiLCJjb2RpX3RyaWJ1bmFsIjoiMjYzIiwiZW50aXBhcmNoaXZvIjoiMyJ9fQ.cB_GJ9sfSq_cvoS2-DvUBfJTesGhfcfl51gRGPvOpGg

然后,如果我检查页面,内容部分将如下:

<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=&quot;Document.pdf&quot;
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 刮掉它,感觉很奇怪。我怎么能得到这个文本?谢谢!

标签: pythonphpseleniumweb-scraping

解决方案


通过模拟鼠标单击全部复制并访问剪贴板来解决它,无需拥有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()

推荐阅读