我正在处理.pdf
仅在我公司网站上可用的文件。我不知道有什么方法可以下载它们并将它们存储在一个文件夹中。
我单击以获取.pdf
文件的链接具有以下源代码:
<a href="javascript:propertiesView('documentName')">
当我单击链接时,一个.pdf
文件会在一个新的浏览器窗口中弹出,它没有 url 也没有源代码。我认为没有办法.pdf
直接操作它,那么我该如何保存它以便.pdfs
从文件夹操作呢?
谢谢你
我正在处理.pdf
仅在我公司网站上可用的文件。我不知道有什么方法可以下载它们并将它们存储在一个文件夹中。
我单击以获取.pdf
文件的链接具有以下源代码:
<a href="javascript:propertiesView('documentName')">
当我单击链接时,一个.pdf
文件会在一个新的浏览器窗口中弹出,它没有 url 也没有源代码。我认为没有办法.pdf
直接操作它,那么我该如何保存它以便.pdfs
从文件夹操作呢?
谢谢你
只需告诉您的浏览器始终将 PDF 文件保存到磁盘,您可能会很幸运(感谢Dirk):
firefoxProfile.setPreference("browser.helperApps.neverAsk.saveToDisk", "application/pdf");
如果这不起作用,您可能可以使用这些switchTo()
方法遍历所有打开的窗口/选项卡。尝试这样的事情来了解您打开的窗口(Prashant Shukla的学分):
public void getWindows() {
Set<String> windows = driver.getWindowHandles();
for (String window : windows) {
driver.switchTo().window(window);
System.out.println(driver.getTitle());
}
}
下载文件的非硒解决方案是使用 apache-commons 库(感谢Shengyuan Lu):
org.apache.commons.io.FileUtils.copyURLToFile(URL, File)
但这需要您知道窗口的 URL,您可能可以使用我提到的第二种方法 ( driver.switchTo()
) 和driver.getCurrentUrl()
.
我认为没有办法直接操作该 .pdf
这是正确的。使用 Selenium,你不能。
那么如何保存它以便操作文件夹中的 .pdfs?
我实际上已经在我工作的回归系统中实现了这个确切的东西。
我的第一步是根据propertiesView()
. 方法做到了。
在你的情况下,我的猜测是什么propertiesView()
。window.open
所以你的目标是,提取它打开的 URL,并使用连接来构造 URL。
一旦你找到了你的 URL,剩下的就是小菜一碟了。只需将 url 下载到名为/pdfs
. 请参阅此问题以了解如何执行此操作。
甚至可能需要调用该方法才能弄清楚。由于我对您的被测系统一无所知,除非您发布它,否则我很难给您一个代码答案。
我要告诉你的一个提示是,如果你使用的是 Selenium 1,请使用
String url =selenium.getEval("var url = something; url;");
获取 url 并将其放入 java 对象。(如果使用 selenium 2,请使用JavaScriptExecutor#executeScript)
如果你想用 selenium 将 PDF 保存到 IE 中的硬盘,你需要使用 pywinauto 和 selenium。我只是将此代码用于在浏览器中打开的 PDF 文件。
//selenium imports
from pywinauto import application //pywinauto import
//write selenium code to open up pdf in the browser
driver = webdriver.Ie("IEDriverServer.exe", capabilities = caps)
//this could be a get or driver.execute_script() to click a link
driver.get("link to pdf")
//save pdf
app = application.Application()
//get the ie window by the title of the application (assuming only one window is open here)
ie = app.window_(title_re = ".*Internet Explorer.*")
//this line focuses on the pdf that is open in the browser
static = ie.Static
//focus on the pdf so we can access the internal controls
static.SetFocus()
//control + h shows the pdf bar, but you don't really need this step
//for it to work. i just used it as a debug
static.TypeKeys("^H")
//open save file dialog
static.TypeKeys("+^S")
//tricky here because the save file dialog opens up as another app instance
//which is how pywinauto sees it
app2 = application.Application()
//bind to the window by title - name of the dialog
save = app2.window_(title_re = ".*Save As.*")
//this is the name of the property where you type in the filename
//way to be undescriptive microsoft
file_name = save[u'FloatNotifySink']
//type in the file name
save.TypeKeys("hello")
//pause for a second - you don't have to do this
time.sleep(4)
//find and bind the save button
button = save[u'&SaveButton']
//click the save button
button.Click()