我有一个自动化脚本,可以使用 Selenium 下载网站中的文件。当“另存为”对话框打开时,我正在使用 PyAutoGUI 写入文件夹目录。问题是:某些运行此脚本的计算机非常慢(真的),并且它在写入正确的目录之前按下“确定”按钮,最终将文件保存在错误的文件夹中。
pd.hotkey('ctrl', 'v')
pd.hotkey('enter')
time.sleep(10)
pd.typewrite(file_name.txt)
pd.hotkey('enter')
有没有一种方法可以在不使用睡眠方法的情况下检查对话框是否已经在正确的目录中,然后给出“确定”?
更新:抱歉,我没有注意到Python标签。但是您可以使用您喜欢的类在 python 中实现相同的方法。 类似的类是 PyRobot。 https://github.com/chriskiehl/pyrobot
如果您期待非常慢的响应。 我建议使用Robot (java.awt.Robot),因为你可以通过robot.delay 控制打字的速度。它也不会移动到下一行,确保在按 Enter 键之前能够键入文件路径的所有字符。 我实际上还没有尝试过 PyAutoGUI,但希望这会有所帮助。
public void main() throws Exception {
Robot robot = new Robot();
typeText("C:/file/path/TESTING.txt");
robot.keyPress(KeyEvent.VK_ENTER);
}
public void typeText(String strValue) throws Exception {
Robot robot = new Robot();
for (int idx = 0; idx < strValue.length(); idx++) {
char chr = strValue.charAt(idx);
if (chr == ':') {
robot.keyPress(KeyEvent.VK_SHIFT);
robot.keyPress(KeyEvent.VK_SEMICOLON);
robot.keyRelease(KeyEvent.VK_SEMICOLON);
robot.keyRelease(KeyEvent.VK_SHIFT);
} else {
if (!Character.isAlphabetic(chr)) {
robot.keyPress(chr);
robot.keyRelease(chr);
} else {
String code = "VK_" + String.valueOf(chr).toUpperCase();
Field f = KeyEvent.class.getField(code);
int keyEvent = f.getInt(null);
if (String.valueOf(chr).equals(String.valueOf(chr).toUpperCase())) {
robot.keyPress(KeyEvent.VK_SHIFT);
robot.keyPress(keyEvent);
robot.keyRelease(keyEvent);
robot.keyRelease(KeyEvent.VK_SHIFT);
} else {
robot.keyPress(keyEvent);
robot.keyRelease(keyEvent);
}
}
}
robot.delay(500);
}
}