Javascript 如何自动化备份下载

Javascript 如何自动化备份下载,javascript,selenium,selenium-webdriver,phantomjs,casperjs,Javascript,Selenium,Selenium Webdriver,Phantomjs,Casperjs,我正在尝试自动下载由创建的备份文件。它的工作方式是登录到一个页面,该页面将加载一个动态生成的带有src=”的iframehttps://tw-backup.teamwork.com/ext.cfm?backupaction=downloadLatestMySQLBackup“ 我已经尝试从iframe获取实际链接,但还没有成功。但是,如果我在浏览器中输入截断的链接,它似乎可以工作。所以我只是想直接打开它 不幸的是,它似乎只是挂起 编辑 phantomjs——版本=1.9.8 获取此错误: [de

我正在尝试自动下载由创建的备份文件。它的工作方式是登录到一个页面,该页面将加载一个动态生成的带有src=”的iframehttps://tw-backup.teamwork.com/ext.cfm?backupaction=downloadLatestMySQLBackup“

我已经尝试从iframe获取实际链接,但还没有成功。但是,如果我在浏览器中输入截断的链接,它似乎可以工作。所以我只是想直接打开它

不幸的是,它似乎只是挂起

编辑

phantomjs——版本=1.9.8

获取此错误:

[debug] [phantom] url changed to "https://tw-backup.teamwork.com/ext.cfm?backupa
ction=downloadLatestMySQLBackup"
[debug] [phantom] Successfully injected Casper client-side utilities
[info] [phantom] Done 8 steps in 3427ms
finished
Unsafe JavaScript attempt to access frame with URL about:blank from frame with U
RL file:///c:/Users/Brad/AppData/Roaming/npm/node_modules/casperjs/bin/bootstrap
.js. Domains, protocols and ports must match.
那么,问题是我试图访问的子域与我开始访问的子域不同吗

如果你对这个问题感兴趣,你可以免费试用团队合作。顺便说一句,我们正在把它很好地用于项目管理

var casper = require('casper').create();

casper.start('https://myco.teamwork.com/', function () {

    console.log("start");

    this.waitForSelector("input[name='userLogin']",
        function success() {
            this.sendKeys("input[name='userLogin']", "me@myco.org");
        },
        function fail() {
            test.assertExists("input[name='userLogin']");
        });
    this.waitForSelector("input[name='password']",
        function success() {
            this.sendKeys("input[name='password']", "somePassword");
            console.log("login successful");
        },
        function fail() {
            test.assertExists("input[name='password']");
            console.log("login failed");
        });

    this.thenOpen('https://tw-backup.teamwork.com/ext.cfm?backupaction=downloadLatestMySQLBackup');   

});

我最终通过迁移到Selenium并使用Chrome驱动程序实现了这一点;Firefox驱动程序无法工作,因为它会弹出一个保存对话框

不幸的是,这项工作我还没有完成。我希望HtmlUnitDriver能工作。这仍然是可能的,但就我而言,打开浏览器实际上是可以的

请注意,您需要安装Chrome。在MAC上,只需将其放入/usr/bin即可。在Windows上,创建一个包含.jar和chromedriver.ext的文件夹。然后使用以下命令执行:

源代码:

package com.rhoads.teamwork.backup;


import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

import java.util.concurrent.TimeUnit;


public class TeamworkBackup {

    public static void main(String[] args) throws Exception {

        WebDriver driver;

        String baseUrl;

        driver = new ChromeDriver();

        baseUrl = "https://myco.teamwork.com/index.cfm";
        driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);

        driver.get(baseUrl + "/");
        Thread.sleep(4000);
        driver.findElement(By.id("password")).clear();
        driver.findElement(By.id("password")).sendKeys("superstrong");
        driver.findElement(By.id("userLogin")).clear();
        driver.findElement(By.id("userLogin")).sendKeys("someguy@example.com");
        driver.findElement(By.id("ordLoginSubmitBtn")).click();
        Thread.sleep(4000);
        driver.get("https://myco.teamwork.com/settings?display=export");
        Thread.sleep(4000);
        driver.switchTo().frame("backupFrame");
        Thread.sleep(4000);
        driver.findElement(By.linkText("Download")).click();
        Thread.sleep(4000);
        driver.quit();


    }
}

你有什么幻影JS版本?请注册到
resource.error
page.error
remote.message
casper.page.onResourceTimeout
事件()。也许有错误。尝试使用
--ssl protocol=any--ignore ssl errors=true
@ArtjomB运行CasperJS。请参阅编辑。该“错误”(不安全的JavaScript尝试…)表明您使用的是PhantomJS 1.9.8,而不是1.9.2。我看你的问题没有错。如何验证第二次页面加载成功或失败?对,是1.9.8(打字错误)。日志显示,“[debug][phantom]url更改为action=downloadslatestmysqlbackup”。这不意味着页面加载成功了吗?是的,它成功了,这就是为什么我要问在加载之后会有什么步骤,以及如何验证它没有成功。
package com.rhoads.teamwork.backup;


import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

import java.util.concurrent.TimeUnit;


public class TeamworkBackup {

    public static void main(String[] args) throws Exception {

        WebDriver driver;

        String baseUrl;

        driver = new ChromeDriver();

        baseUrl = "https://myco.teamwork.com/index.cfm";
        driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);

        driver.get(baseUrl + "/");
        Thread.sleep(4000);
        driver.findElement(By.id("password")).clear();
        driver.findElement(By.id("password")).sendKeys("superstrong");
        driver.findElement(By.id("userLogin")).clear();
        driver.findElement(By.id("userLogin")).sendKeys("someguy@example.com");
        driver.findElement(By.id("ordLoginSubmitBtn")).click();
        Thread.sleep(4000);
        driver.get("https://myco.teamwork.com/settings?display=export");
        Thread.sleep(4000);
        driver.switchTo().frame("backupFrame");
        Thread.sleep(4000);
        driver.findElement(By.linkText("Download")).click();
        Thread.sleep(4000);
        driver.quit();


    }
}