Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   manipular web usando edgebrowser (https://www.clubdelphi.com/foros/showthread.php?t=95653)

asoto92 14-04-2022 16:21:00

manipular web usando edgebrowser
 
Hola a todos, necesito manipular una sitio web, introduciendo el Usuario y Password, el navegador que uso es el EdgeBrowser, estoy trabajando con Delphi 10.4 Community, mi browser es funcional, ya puedo ver la pagina Web, pero no se como introducir el Usuario y el Password en la web. Es la primera vez que trabajo con este browser (EdgeBrowser), ojala tengan una idea de como introducir los datos.

De antemano muchas gracias por su ayuda.

dec 15-04-2022 10:38:08

Hola a todos,

Una posibilidad podría ser utilizar el método "ExecuteScript" de los objetos "TEdgeBrowser". Por ejemplo, en el evento "BrowserNavigationCompleted" podrías hacer uso del método en cuestión de una forma similar a la siguiente:
Código Delphi [-]
  EdgeBrowser.ExecuteScript('document.getElementById("name").value = "Pepe";');
  EdgeBrowser.ExecuteScript('document.getElementById("email").value = "pepe@gmail.com";');
  EdgeBrowser.ExecuteScript('document.getElementById("submit").click();');

asoto92 15-04-2022 17:48:27

manipular web usando edgebrowser
 
Hola Dec, gracias por tu pronta respuesta, deme oportunidad de hacer algunas pruebas con lo que me proporcionaste y te comento a la brevedad lo que me resulte.

Hasta pronto.

asoto92 20-04-2022 00:36:00

Seguir con Manipular web usando edgebrowser
 
Disculpa la tardanza, estoy intentando probar tu codigo de ejemplo, pero creo que me faltan cosas, por lo que entiendo cada linea de codigo que me indicaste es una especie de script que se ejecuta en el procedimiento:

Código Delphi [-]
procedure TfrmMain.EdgeBrowserExecuteScript(Sender: TCustomEdgeBrowser; AResult: HResult;
  const AResultObjectAsJson: string);

Ahora estoy poniendo el comando que me indicaste en:

Código Delphi [-]
   procedure TfrmMain.EdgeBrowserNavigationCompleted(Sender: TCustomEdgeBrowser; IsSuccess: Boolean;
     WebErrorStatus: TOleEnum);
   begin
      EdgeBrowser.ExecuteScript('document.getElementById("USUARIO").value = "pepe@gmail.com";');
   end;

Y al ejecutarse aparece: (anexe imagen) pero lo que aparece es:

Cita:

The script has completed:
Result = $0
ResultObject = null
No se interpretarlo, pero entiendo que al parecer corrio bien el Script, pero en mi pagina no alimento el espacio para el usuario, no se que mas este faltando?

Saludos.

dec 20-04-2022 10:10:19

Hola a todos,

El método que indicas "EdgeBrowserExecuteScript" es un evento, que, en realidad puedes usar o no, dependiendo de tus necesidades. Esto lo digo poque, el mensaje / alerta que te aparece, no tiene porqué aparecerte, si no lo necesitas.

Por otro lado, el método "EdgeBrowser.ExecuteScript" se llama en "EdgeBrowserNavigationCompleted" porque, en ese momento, en principio, es cuando podemos acceder a los diferentes elementos HTML que existan en la página en cuestión.

El método "EdgeBrowser.ExecuteScript" requiere de un parámetro de tipo "string" y esta "cadena" debe indicar el código Javascript que queremos que se ejecute en el contexto de la página cargada en el navegador.

El método "document.getElementById" es por tanto código Javascript, y, en este caso, buscará un elemento a partir de su ID. De modo que el siguiente código:

Código:

document.getElementById("USUARIO").value = 'Pepe';
... viene a significar "Busca el elemento con ID = "USUARIO", y, cambia su propiedad "value" con "Pepe". Si este código no funciona, en principio, es porque no existe ningún elemento con ID = "USUARIO", o, dicho elemento, no tiene ninguna propiedad "value".

Es decir, en la página en cuestión, debería haber un elemento como el siguiente, para que el código Javascript anterior funcionase como se espera que lo haga:

Código:


<input id="USUARIO" />

Por tanto, deberás echar un vistazo al código fuente de la página, y, ver qué elemento alberga el usuario, cuál es su ID, o, si no tiene ID, cuál es su atributo "name", en definitiva, para saber qué código Javascript es necesario utilizar para hacer lo que quieres.

asoto92 20-04-2022 19:28:28

Me ayudo mucho tu guia, no sabes como te lo agradezo, ya pude afectar el sitio web con el dato del Usuario y Password.

Muchismas Gracias

alquimista 22-03-2023 10:51:36

Como acceder al user y pass dentro de una tabla
 
Buenas
he intentado hacer lo mismo en una web pero no consigo entrar el usuario y el password automáticamente.
Una parte del código de la página es:



Código PHP:

<div id="form_login">
        <
form action="/index.php" method="post">
            <
table>
                <
tbody><tr>
                    <
td>
                        
Usuario/a                    </td>
                    <
td>
                        <
input type="text" name="usuario" class="inputtexto" tabindex="1" maxlength="50" value="">
                    </
td>
                    <
td rowspan="2" style="text-align: right;">
                        <
input type="submit" name="login" class="botonform" tabindex="3" value="Entrar">
                    </
td>
                </
tr>
                <
tr>
                    <
td>
                        
Contraseña                    </td>
                    <
td>
                        <
input type="password" name="password" tabindex="2" maxlength="50" class="inputtexto">
                    </
td>
                </
tr>
            </
tbody></table>
        </
form>
        <
div class="olvidaContrasenya" style="font-size: 10pt; display: none;">Introduzca usuario/a y contraseña para acceder al sistemaSi olvidó algún datohaga clic aquí:            <p style="text-align: center; margin: 4px;">
                <
a href="#" onclick="muestraAjaxModal('inc/ajax/recordar_pass.php', 'Recordar Usuario/Contraseña', 305, 235);">
                    
Recordar datos                </a>
            </
p>
        </
div>
            </
div


el código que he usado es:
Código Delphi [-]
procedure TForm2.EdgeBrowser1NavigationCompleted(Sender: TCustomEdgeBrowser;
  IsSuccess: Boolean; WebErrorStatus: TOleEnum);
begin
  EdgeBrowser1.ExecuteScript('document.getElementById("usuario").value = "23232323A";');
  EdgeBrowser1.ExecuteScript('document.getElementById("password").value = "password";');
  EdgeBrowser1.ExecuteScript('document.getElementById("submit").click();');
end;


Pero no obtengo nada. Ni me da error.

No se mucho de Javascript. He probado a poner getElementsByName pero no sé como seguir


Un saludo

alquimista 29-03-2023 23:43:22

Encontré una solución
 
Eureka!!!!!!! Lo encontré.

Respondo para los que hayan tenido el mismo problema que yo.
He visto de casualidad una función de javascript (no sé ni donde la encontré) y al implementarla he podido llegar a la solución.


Si alguien más sabio sabe interpretarla que me la explique:D:D
He añadido una variable booleana para que solo lo haga una vez, ya que si se vuelve a ejecutar te saca del login.


Código Delphi [-]
procedure TForm2.EdgeBrowser1NavigationCompleted(Sender: TCustomEdgeBrowser;
  IsSuccess: Boolean; WebErrorStatus: TOleEnum);
begin
 if (Unavez=false) then
   begin
  EdgeBrowser1.ExecuteScript('document.querySelector("input[type=text]").value="tunif22222222A";');
  EdgeBrowser1.ExecuteScript('document.querySelector("input[type=password]").value="tupassword";');
  EdgeBrowser1.ExecuteScript('document.querySelector("input[type=submit]").click();');
   Unavez:=true;
   end;
end;

dec 30-03-2023 08:45:27

Hola a todos,

Cita:

Empezado por alquimista (Mensaje 550804)
[...] el código que he usado es:
Código Delphi [-]
procedure TForm2.EdgeBrowser1NavigationCompleted(Sender: TCustomEdgeBrowser;
  IsSuccess: Boolean; WebErrorStatus: TOleEnum);
begin
  EdgeBrowser1.ExecuteScript('document.getElementById("usuario").value = "23232323A";');
  EdgeBrowser1.ExecuteScript('document.getElementById("password").value = "password";');
  EdgeBrowser1.ExecuteScript('document.getElementById("submit").click();');
end;


Pero no obtengo nada. Ni me da error.

Lo que sucede es que los "inputs" no tienen un atributo "id", por lo que "getElementById" retorará "null" y por eso no te funciona como esperas.

Respecto de "getElementsByName", este método retorna un array de elementos: sí que podría retornarte los elementos en cuestión, porque, sí tienen atributo "name", pero, el código JS a ejecutar debería quedar tal que así:

Código:

document.getElementsByName("usuario")[0].value = '23232323A';

Cita:

Empezado por alquimista (Mensaje 550898)
Eureka!!!!!!! Lo encontré.

En efecto, "querySelector" es, por decirlo de alguna manera, más potente que los métodos mencionados, porque, permite seleccionar elementos mediante "selectores", no sólo mediante sus atributos "id" o "name".

De hecho, el código que ejecutas podría utilizar ahora el atributo "name", evitando así seleccionar otros posibles "inputs" que existiesen en la página del tipo que indicas, es decir, podrías usar algo como esto:

Código:

document.querySelector("input[name=usuario]").value="tunif22222222A";

alquimista 30-03-2023 13:15:31

Probé con
Código:

  EdgeBrowser1.ExecuteScript('document.getElementsByName("usuario").value = "23232323A";');
pero no hacía nada. Lo del ById, efectivamente en la página no había Id, no funcionó.

Probaré con lo último que has puesto a ver que pasa.
Código:

document.querySelector("input[name=usuario]").value="tunif22222222A";
Un saludo

dec 30-03-2023 14:13:19

Hola a todos,

Cita:

Empezado por alquimista (Mensaje 550909)
Probé con
Código:

  EdgeBrowser1.ExecuteScript('document.getElementsByName("usuario").value = "23232323A";');
pero no hacía nada. Lo del ById, efectivamente en la página no había Id, no funcionó.

Probaré con lo último que has puesto a ver que pasa.
Código:

document.querySelector("input[name=usuario]").value="tunif22222222A";
Un saludo

No es que "getElementsByName" no hiciese nada: lo que ocurre es que ese método retorna un array de objetos, de modo que lo que fallaba era esto: getElementsByName("usuario").value, que, tendría que haber sido algo así: getElementsByName("usuario")[0].value

Respecto de que no pasaba nada... entiendo que te refieres a ningún error, lo que ocurre es que el error se produciría en el contexto de la página web en cuestión. Creo que usando algún evento de "TEdgeBrowser", o, la "consola de desarrollo" del mismo podrías ver dicho error.

Gigolo5236 13-04-2023 22:20:24

Por aca también lo ando probado y ya solucione algunas cosas


La franja horaria es GMT +2. Ahora son las 15:29:58.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi