我的问题如下......我写了一个用于管理userdata的小型桌面应用程序。现在我正在写一个“登录”功能。我发现任何网站的自动查找登录区域对我来说都很难,所以我想这样做。
如果用户按下“登录”,我的应用程序将使用系统的默认浏览器启动给予网站。现在在网站上点击用户名字段 - >程序粘贴用户名。现在按TAB键到密码字段 - >密码由应用程序自动粘贴。
我怎样才能实现这一点,它是否可行/可行。我认为这可能会做到这一点,首先在鼠标点击然后在TAB上调用...但我被卡住了。
private void pasteData(String str){
StringSelection stringSelection = new StringSelection(str);
Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
clipboard.setContents(stringSelection, stringSelection);
try {
Robot robot = new Robot();
robot.keyPress(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_V);
robot.keyRelease(KeyEvent.VK_V);
robot.keyRelease(KeyEvent.VK_CONTROL);
} catch (AWTException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
提前致谢!
答案 0 :(得分:1)
我知道,您有使用Java制作的桌面应用程序,并且您希望与网站进行通信。好。这是可能的,但我不建议这样做(Java Robot
类)。为什么?因为你基本上不知道网页登录表单的位置和粘贴文本的位置(登录名和密码),所以如果你正在寻找更有效的方法,那么它是如何做的,那就是:
1.)JavaScript或浏览器插件 如何与用户底层浏览器进行通信的最有效方法是制作简单的插件,然后将信息传递给此插件并返回程序。使用此插件,您可以非常简单地找到登录表单或自动保存密码。
2.。程序中的嵌入式浏览器 从webview开始,您可以轻松获取html元素并传递或从中获取信息。
或)您的机器人方式 您的代码是正确的,但请检查您是否在Windows上,而不是在其他操作系统上,可以使用另一个按键组合进行粘贴。对于其他用户,这种方式是有效的,因此请检查您是否有其他正确的代码。
并尝试将clipboard.setContents(stringSelection, stringSelection);
更改为clipboard.setContents(stringSelection, null);
,因为.setContents具有第二个参数所有者:
setContents(Transferable contents, ClipboardOwner owner)
设置 剪贴板到指定的可传输对象的当前内容 并将指定的剪贴板所有者注册为新的所有者 内容。