【问题标题】:How to interact with a print box using python如何使用 python 与打印框交互
【发布时间】:2018-09-11 02:14:29
【问题描述】:

我一直在使用 selenium 自动打印文档,但我卡在了打印屏幕上。据我所知,硒不与打印屏幕交互,所以我正在寻找一种可以与硒一起使用的替代情况。到目前为止,我的代码在下面,我所需要的只是让我选择一台新打印机然后打印的代码。另外,我想将该打印机更改为另存为 PDF,然后将 pdf 保存到文件中,如果这样可以提供一个快捷方式,对我有很大帮助。

from selenium import webdriver
from selenium import *
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys

driver = webdriver.Remote(
         command_executor='http://127.0.0.1:4444/wd/hub',
         desired_capabilities=DesiredCapabilities.CHROME) #This is because I am using remote web driver for my Mac, but it is the same as regular web driver

driver.execute("window.print()")

#Need code here

【问题讨论】:

    标签: python selenium web-scraping printing automation


    【解决方案1】:

    找到了可能对您有用的建议。 How to convert webpage into PDF by using Python

    也许试试 pdfkit

    import pdfkit
    pdfkit.from_url('http://google.com', 'out.pdf')
    

    【讨论】:

    • 我使用的网站是分类的,因为我是一名医生,所以我不能给你看,但它让我点击了打印按钮,并选择了文档和打印的格式屏幕出现了,所以这不起作用。我需要一些可以直接与打印屏幕交互的东西
    • 我很确定 WebDriver 无法处理这些或任何其他浏览器或操作系统对话框,根据这篇文章的一些搜索。我认为 AutoIt 可以很好地满足您的要求。我会环顾四周并检查更多选项。 stackoverflow.com/questions/11537103/…
    • //切换到打印对话框 Set windowHandles = driver.getWindowHandles(); if (!windowHandles.isEmpty()) { driver.switchTo().window((String) windowHandles.toArray()[windowHandles.size() - 1]); } //现在像使用普通页面一样使用对话框:driver.findElement(By.className("cancel")).click();
    • 这段代码似乎有效,但如何在 python 中获取它。另外,谢谢威廉。
    【解决方案2】:

    我使用了 window.print(),然后执行了一个包含必要 js 命令的 python 字符串: print_function = ''' let A = document.getElementsByTagName('print-preview-app')[0].shadowRoot; let B = A.getElementById('sidebar').children[0].shadowRoot; let C = B.getElementById('button-strip').children[0] C.click() ''' driver.execute_script(print_function)

    请记住,您还需要使用 driver.swich_to.window(window_handles[i]) 来确保您正在与打印框进行交互。

    一旦你进入了一个 shadowRoot 元素,你就没有对你可用的 driver.find_element_by 方法的全部补充。在 shadowRoot 中搜索时,您仅限于通过 JS 提供的方法。

    【讨论】:

      猜你喜欢
      • 2020-02-20
      • 1970-01-01
      • 2011-07-06
      • 2020-10-08
      • 1970-01-01
      • 2019-11-08
      • 2016-11-15
      • 2015-03-03
      • 1970-01-01
      相关资源
      最近更新 更多