使用机器人保存具有不同名称的网页

using a robot to save a web page with different names

我正在使用selenium创建一个打开页面并自动保存的机器人,如下:

    WebDriver driver = new FirefoxDriver();
driver.get("http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=7043856");

Robot robot = new Robot();

robot.delay(20000);


robot.keyPress(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_S);
robot.keyRelease(KeyEvent.VK_CONTROL);    
robot.keyRelease(KeyEvent.VK_S);

robot.keyPress(KeyEvent.VK_ENTER);
robot.keyRelease(KeyEvent.VK_ENTER);

有两个问题,首先,它实际上不按回车键,只打开 save as window,其次,我怎样才能让它传递一个不同的名称或至少, 文件名相同时不覆盖页面?

你是对的。当我们使用 driver.getPageSource() 时 css,脚本和相关资源不会被保存并且无法正常离线查看。

我能够使用相同的代码保存文件。只是在每次操作后加一个Thread.sleep()而已。

请注意,当另存为 window 打开时,焦点位于文件名上。所以你可以使用机器人 class 输入文件名。关于您的文件名问题不应被覆盖,您可以使用随机数生成器。您可能需要创建一个函数来简化此任务。

请检查下面的代码。

public static void main(String[] args) throws AWTException, InterruptedException {

    WebDriver driver = new FirefoxDriver();
    driver.get("http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=7043856");

    // Added this line to let the page load completely
    String pageSource = driver.getPageSource();

    Robot robot = new Robot();

    // Press Ctrl+S
    robot.keyPress(KeyEvent.VK_CONTROL);
    robot.keyPress(KeyEvent.VK_S);
    robot.keyRelease(KeyEvent.VK_CONTROL);
    robot.keyRelease(KeyEvent.VK_S);

    Thread.sleep(5000);

    // Generate a 2 digit random number and split it into two separate chars
    String random = RandomStringUtils.randomNumeric(2);
    System.out.println(random);
    char charOne = random.charAt(0);
    char charTwo = random.charAt(1);

    // Save As window has opened and the focus is on the file name field.
    // Click right arrow key to go to the last of the already present name
    robot.keyPress(KeyEvent.VK_RIGHT);
    robot.keyRelease(KeyEvent.VK_RIGHT);

    // Append the generated random number to the name
    robot.keyPress(getKeyEvent(charOne));
    robot.keyRelease(getKeyEvent(charOne));
    robot.keyPress(getKeyEvent(charTwo));
    robot.keyRelease(getKeyEvent(charTwo));

    Thread.sleep(5000);

    // Press enter
    robot.keyPress(KeyEvent.VK_ENTER);
    robot.keyRelease(KeyEvent.VK_ENTER);

}

public static int getKeyEvent(char key) {

    switch (key) {
    case '1':
        return KeyEvent.VK_1;
    case '2':
        return KeyEvent.VK_2;
    case '3':
        return KeyEvent.VK_3;
    case '4':
        return KeyEvent.VK_4;
    case '5':
        return KeyEvent.VK_5;
    case '6':
        return KeyEvent.VK_6;
    case '7':
        return KeyEvent.VK_7;
    case '8':
        return KeyEvent.VK_8;
    case '9':
        return KeyEvent.VK_9;
    default:
        return KeyEvent.VK_0;
    }
}