【问题标题】:VBA Selenium Chromedriver save PDFVBA Selenium Chromedriver 保存 PDF
【发布时间】:2020-06-29 20:28:46
【问题描述】:

此链接是一个 PDF 文件,可在 Chrome PDF file 中打开。 我可以从这个页面以某种方式保存这个 PDF 文件吗? 我用这样的设置运行 chrome

driver.SetPreference "download.default_directory", "c:\chr"
driver.SetPreference "download.directory_upgrade", True
driver.SetPreference "download.prompt_for_download", False

但是当您按下 CONTROL + S 时,仍会出现另存为窗口。 我可以直接从 Chrome 下载 PDF 吗?

更新代码:

这很好用:

Public Sub browser_open()


Set driver = New ChromeDriver

driver.SetPreference "download.prompt_for_download", False
driver.AddArgument "--kiosk-printing"

driver.Start "chrome"
driver.get "https://data2.manualslib.com/pdf3/53/5221/522008-haier/washing_machine.pdf?b76112ef24159605ca8df71689bce0a7"

driver.SendKeys keys.ArrowDown
driver.SendKeys keys.ArrowDown, keys.ArrowLeft

但如果我想按“CONTROL + S”:

driver.SendKeys keys.Control, "s"

什么都没有发生。

【问题讨论】:

  • 这是一个网站网址,而不是直接下载链接。如果您打算通过在 chrome 中按下载来下载,它位于 shadow-root 中,并且需要 API 接口。在此处查看示例:stackoverflow.com/a/52906215/6241235
  • 感谢您的回答。我尝试使用您的示例,但 .SendKeys keys.Control, "s" 在此 PDF 页面 link 上不适用于我,在 .SendKeys keys.Control, "s" 未打开另存为对话框之后
  • 你的窗把手选对了吗?
  • 我只有一个 Chrome 窗口。我更新了我的代码。我的错误在哪里?
  • 我的意思是使用我发送的链接中的解决方案。如果没有 API 调用,您将无法通过 shadow-root 与打印 pdf 进行交互

标签: vba selenium google-chrome selenium-chromedriver


【解决方案1】:

我为我的英语道歉,我使用谷歌翻译。

此命令运行一个脚本,该脚本创建一个链接元素以将页面保存为 pdf 文件,然后模拟点击链接。

driver.ExecuteScript "var a = document.createElement('a'); a.href = '" & driver.url & "'; a.download = 'My file.pdf'; document.body.appendChild(a); a.click();"

以下是完整代码:

Public Sub browser_open()

Set driver = New ChromeDriver

driver.SetPreference "download.prompt_for_download", False
driver.AddArgument "--kiosk-printing"

driver.Start "chrome"
driver.Get "https://data2.manualslib.com/pdf3/53/5221/522008-haier/washing_machine.pdf?b76112ef24159605ca8df71689bce0a7"
driver.ExecuteScript "var a = document.createElement('a'); a.href = '" & driver.url & "'; a.download = 'My file.pdf'; document.body.appendChild(a); a.click();"

注意! 开始下载可能需要几秒钟。

注意! 要下载多个文件,您需要在弹出窗口中确认这一点,我不知道如何以编程方式执行此操作。

【讨论】:

    猜你喜欢
    • 2018-04-10
    • 2018-12-29
    • 1970-01-01
    • 2022-01-21
    • 2017-07-06
    • 2021-12-26
    • 1970-01-01
    • 1970-01-01
    • 2016-09-01
    相关资源
    最近更新 更多