解决selenium2打印弹出窗口的方法

2024-10-01 17:40:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在开发一个程序,在selenium的webdriver和firefox的帮助下,它可以在域中爬行,在这个过程中抓取所有可见的文本。(程序用python编写)

当selenium用javascript window.print()打开页面时,爬虫程序当前正在停止,等待我在弹出窗口中手动单击“close”。在

我尝试过driver.select_pop_up()函数,在延迟时间之后,希望能够在选择窗口后关闭它。但无法选择窗口。在

我一直在读这个问题,从this selenium FAQ page开始,我几乎得出结论,我必须在阅读以下内容时采取变通办法:

要解决这个问题,您可以使用一个变通方法(如果有的话);否则您可能必须从自动语料库中排除该测试。

我看到的唯一解决办法是不要打开含有“打印”一词的链接说明的网页,但是我觉得这很难看,我想听听其他人是否有更好的想法。在

显示问题示例的代码:

from selenium               import webdriver  
import time

skrivutsiden = 'www.alfkvam.no/index.php?id=4849944&cat=159037&printable=1'
vanligside = 'http://www.google.no'

driver = webdriver.Firefox()

driver.get(vanligside)
driver.get(skrivutsiden)

编辑:

使用prestomanifesto提出的代码,我实际上成功地在一个空的firefox窗口中触发了一个“打印弹出窗口”。当代码产生了我试图避免的事件时,我在想它可能首先是错误的代码?这是一个错误的结论吗? 下面的代码生成了弹出窗口:

^{pr2}$

重新编辑:

上面的代码触发弹出窗口的原因是我把javascript弄错了-我写的

"window.print() = function() {}"

而不是

"window.print = function() {}"

这并没有解决最初的问题,但它解释了第一次编辑中引入的意外弹出窗口。在

我向你道歉

重新编辑:

已尝试更新解决方案。我找到了this site,在那里我看到了建议的以下代码行:

((JavascriptExecutor)m_driver).executeScript("window.confirm = function(msg){return
false;};");

基于此,我尝试了以下方法,但没有成功:

driver.execute_script("window.print = function(msg) {return false;};")

Tags: 代码import程序编辑wwwdriverseleniumfunction
2条回答

我终于找到了解决办法:

我贴的

    "print.always_print_silent": "true",
    "print.show_print_progress": "false",

在Firefox用户配置文件中。Selenium有自己的默认用户配置文件,您可以对其进行编辑。包含配置文件的文件称为firefox_配置文件.py在

请注意,这只是启用打印,而无需通过弹出窗口询问用户。它对我有用,因为我没有连接打印机。在

我在r-kiosk add-on的介绍中找到了这些代码行。在

您可以尝试在Selenium能够支持alert消息之前存在的解决方法。基本上,您希望重写print函数,使其不做任何事情。在

所以你应该在测试开始的时候做这样的事情:

driver.execute_script("window.print = function() {}");

(很抱歉,如果代码不正确,我不经常使用python)。在

这样,一旦页面调用window.print(),什么都不会发生,您的测试可以继续不间断地进行。在

相关问题 更多 >

    热门问题