確實這是一個令人討厭的問題。不過,我可以想出如何解決它的Firefox。也許你可以爲其他瀏覽器找到類似的解決方案。
基本上,你必須強制瀏覽器下載文件而不要求它。您可以通過加載特製的配置文件來實現此目的。
from selenium import webdriver
myprofile = webdriver.FirefoxProfile('./profile')
myprofile.set_preference('browser.download.dir', '/tmp/my_downloads_folder')
myprofile.set_preference('browser.download.folderList', 2)
myprofile.set_preference('pdfjs.migrationVersion', 1);
browser = webdriver.Firefox(fp)
除了加載配置文件,我們還定義了一個下載文件夾,並禁用pdfjs
插件。
在./profile
文件夾中,我們有一個mimeTypes.rdf
文件是這樣的:
<?xml version="1.0"?>
<RDF:RDF xmlns:NC="http://home.netscape.com/NC-rdf#"
xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<RDF:Description RDF:about="urn:mimetype:application/pdf"
NC:value="application/pdf"
NC:editable="true">
<NC:handlerProp RDF:resource="urn:mimetype:handler:application/pdf"/>
</RDF:Description>
<RDF:Description RDF:about="urn:mimetype:handler:application/pdf"
NC:alwaysAsk="false"
NC:saveToDisk="true"
NC:handleInternal="false">
<NC:externalApplication RDF:resource="urn:mimetype:externalApplication:application/pdf"/>
</RDF:Description>
</RDF:RDF>
我希望它可以幫助你。
如果luksch的回答對你來說還不夠,我還有一個想法。如果您可以嗅探併發布Http/Session參數,那麼通過正常交互下載可以獲得這些參數?如果您構建數據包並管理您的會話(即,Cookie /緩存 - 無論何處保存上一次交互),那麼您可以在無需下載的情況下檢查鏈接。 –
如何在瀏覽器本身打開PDF? – Manu