我在执行测试时遇到无头铬的问题:单击按钮时,PDF文件在新选项卡中打开。如果我在NON-headless模式下运行测试,一切都很好。但是,当尝试以无头方式执行相同操作时-文件未下载。
options = ChromeOptions()
options.add_argument('--no-sandbox')
options.add_argument('--kiosk-printing')
options.add_argument('--test-type')
options.add_argument('--disable-infobars')
options.add_argument('disable-gpu')
options.add_argument('--verbose')
options.add_argument('--disable-extensions')
options.add_argument('--ignore-certificate-errors')
options.add_experimental_option("prefs", {
"profile.default_content_settings.popups": 0,
"download.default_directory": dwnld_path,
"download.prompt_for_download": False,
"download.directory_upgrade": True,
"safebrowsing.enabled": False,
"plugins.always_open_pdf_externally": True,
"plugins.plugins_disabled": ["Chrome PDF Viewer"]
})
我还发现:
wd.command_executor._commands["send_command"] = ("POST", '/session/$sessionId/chromium/send_command')
params = {'cmd': 'Page.setDownloadBehavior', 'params': {'behavior': 'allow', 'downloadPath': dwnld_path}}
command_result = wd.execute("send_command", params)
但这仅在我收到以无头模式下载的请求时才有帮助,而如果文件在浏览器中打开则无济于事。
最佳答案
尝试保存PDF文件的网址,然后将其与请求库一起下载,我认为它会起作用。
像这样:
import urllib3
import PyPDF2
import certifi
import io
http = urllib3.PoolManager(cert_reqs='CERT_REQUIRED', ca_certs=certifi.where())
pdf_url = "http:\\XXXXXX.pdf"
r3 = http.request('GET', pdf_url)
with io.BytesIO(r3.data) as open_pdf_file:
read_pdf = PyPDF2.PdfFileReader(open_pdf_file)
num_pages = read_pdf.getNumPages()
然后我们需要以类似方式保存pdf的代码的第二部分