Intentaba hacer un programa que me logeara en paginas, resolví hacerlo de la siguiente forma:
> Un método que escribe archivos, lo uso para escribir un vbs que envíe pulsaciones de teclas, como no supe llamar al vbs desde java resolvi usar este mismo metodo para escribir un bat que llame al vbs y le pase los argumentos con cscript
> Un metodo que reciba los argumentos necesarios para escribir el bat y que llame al vbs
> Esop, el resto lo hace el vbs, luego de abrir el navegador con la url especificada, muestra un msgbox y cuando se le da aceptar espera tres segundos y envía las pulsaciones de teclas.
Dejo el code de los métodos que uso, dejaría el code completo pero la gui la hice en netbeans, ya no me da el ánimo para codear en bloc de notas Xd
para escribir un archivo:
void writer(String[] args, String file, boolean rewrite, boolean delete_on_exit){
/**
*
* El primer argumento indica
* las palabras que se agregaran al archivo de
* texto plano.
*
* El segundo argumento indica la ruta de
* dicho archivo.
*
* Si el tercer argumento
* es true el archivo
* se sobreescribe
*
* Si el cuarto argumento es true
* el archivo se borra al cerrar
* el programa
*
*
*/
String[] in=this.reader(file).split("\n");
Writer w=new Writer(file, delete_on_exit);
if(rewrite){
w.touch();
}else{
for(String val:in){
w.write(val);
}
}
for(String val:args){
w.write(val);
}
w.close();
}
Y la clase writer:
class Writer {
java.io.BufferedWriter bw;
String file="";
Writer(String foo, boolean delete){
this.file=foo;
try{
File f = new File(this.file);
if(delete){
f.deleteOnExit();
}
bw=new BufferedWriter(new FileWriter(f));
}catch(IOException ex){
}
}
public void write(String line){
try{
bw.append(line);
bw.newLine();
}catch (IOException ex) {
ex.printStackTrace();
}
}
public void touch(){
File f = new File(this.file);
try{
if(f.exists()){
f.delete();
f.createNewFile();
}else{
f.createNewFile();
}
}catch(IOException c){
}
}
public void touch(String foo){
try{
File fi= new File(foo);
if(fi.exists()){
fi.delete();
fi.createNewFile();
}else{
fi.createNewFile();
}
}catch(IOException c){
}
}
public void close(){
try{
this.bw.close();
}catch(IOException ex){
}
}
}
El vbs, este no cambia
set wss=createobject("wscript.shell")
dim com
com=""""
wss.run("cmd /c start " + com + com + " " + wscript.arguments(0))
msgbox "pulsa aceptar para logear"
wscript.sleep 3000
wss.sendkeys wscript.arguments(1)
wscript.sleep 200
wss.sendkeys "{tab}"
wscript.sleep 200
wss.sendkeys wscript.arguments(2)
El bat, este se escribe con el método writer de java:
@echo off
cscript /nologo "C:\Users\Zero\desktop\temp.vbs" "http://foro.elhacker.net/login.html" "user" "pass"
El metodo que llama al writer y escribe el bat (no recuerdo si fue este es que lo hice varias veces)
public void cscript(String[] args, String vbs) {
String temp = "";
if (new File(System.getProperty("user.home") + "\\desktop").isDirectory()) {
temp = System.getProperty("user.home") + "\\desktop\\temp.bat";
} else if (new File(System.getProperty("user.home") + "\\escritorio").isDirectory()) {
temp = System.getProperty("user.home") + "\\escritorio\\temp.bat";
} else {
temp = JOptionPane.showInputDialog("Dame el path de tu escritorio");
}
String args2 = "";
for (String val : args) {
args2 += " " + "\"" + val + "\"";
}
String com = "\"";
String[] bat = {"@echo off", "cscript /nologo " + com + vbs + com + args2};
this.writer(bat, temp, true, true);
try {
Runtime.getRuntime().exec("cmd /c " + temp);
} catch (IOException ex) {
}
}
Y bueno, el programa me salió, pero dependo mucho de estos archivos temporales, si hay otra solución sería genial, desde ya gracias por leer este tema.
Saludos
