我目前正在开发一个程序,在selenium的webdriver和firefox的帮助下,通过域抓取它,在此过程中抓取所有可见文本。 (以python编写的程序)
当selenium打开带有javascript window.print()
的网页时,抓取工具当前正在停止,等待我在出现的弹出窗口中手动点击“关闭”。
我在延迟时间之后尝试了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窗口中触发“打印弹出窗口”。当代码产生我试图避免的事件时,我认为它首先可能是错误的代码?这是一个错误的结论吗? 下面的代码生成了弹出窗口:
from selenium import webdriver
import time
driver = webdriver.Firefox()
driver.execute_script("window.print() = function() {}")
RE-编辑:
以上代码触发弹出窗口的原因是因为我得到了错误的javascript - 我写了
“window.print()= function(){}”
而不是
“window.print = function(){}”
这并没有解决原始问题,但它解释了第一次编辑中引入的意外弹出窗口。
我的道歉presto宣言
RE-编辑:
尝试更新解决方案。我找到this site,在那里我看到了以下代码行:
((JavascriptExecutor)m_driver).executeScript("window.confirm = function(msg){return
false;};");
基于此,我尝试了以下无效:
driver.execute_script("window.print = function(msg) {return false;};")
答案 0 :(得分:5)
我终于找到了解决方法:
我粘贴了
"print.always_print_silent": "true",
"print.show_print_progress": "false",
进入Firefox用户个人资料。 Selenium拥有自己的默认用户配置文件,您可以编辑它。包含该配置文件的文件名为firefox_profile.py
请注意,这只是在不通过弹出窗口询问用户的情况下启用打印。它对我有用,因为我没有连接打印机。
我在r-kiosk add-on的简介中找到了这些代码行。
答案 1 :(得分:2)
您可以尝试在Selenium能够支持之前为alert
消息存在的变通方法。基本上你想覆盖print
函数,所以它什么都不做。
所以你会在测试开始时做这样的事情:
driver.execute_script("window.print = function() {}");
(对不起,如果代码不正确,我不经常使用python)。
这样一旦页面调用window.print()
,就不会发生任何事情,您的测试可以继续不间断。