Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi CEF4 Chromium-执行javascript操作_Javascript_Delphi_Chromium Embedded - Fatal编程技术网

Delphi CEF4 Chromium-执行javascript操作

Delphi CEF4 Chromium-执行javascript操作,javascript,delphi,chromium-embedded,Javascript,Delphi,Chromium Embedded,我正在使用Delphi和TChromium组件来自动化一些任务。我已经能够使用如下JavaScript填写表单并提交它们: Chromium1.browser.MainFrame.ExecuteJavaScript ('document.getElementById(''LoginForm_username'').value="' + Ini.ReadString('config', 'usuario', '') + '"', Chromium1.browse

我正在使用Delphi和TChromium组件来自动化一些任务。我已经能够使用如下JavaScript填写表单并提交它们:

Chromium1.browser.MainFrame.ExecuteJavaScript
      ('document.getElementById(''LoginForm_username'').value="' +
      Ini.ReadString('config', 'usuario', '') + '"',
      Chromium1.browser.MainFrame.GetURL, 0);

Chromium1.Browser.MainFrame.ExecuteJavaScript('document.forms[0].submit()',
      Chromium1.browser.MainFrame.GetURL, 0);
<form style="border:none;height:16px;width:16px;margin: 0px auto 0px auto;" id="pago-form" action="?r=pago/pago/formpago" method="post">                                  
    <input value="R%0AN%17%9D%C4%D8%AB%A8%27%2A%06S%01%B9.%DF%00c%DC%BFD%B5%D2%E8%C9%A9%C6%84%B7%FFa" 
    name="Pago[idserial]" id="Pago_idserial" type="hidden">                                    
    <input value="R%0AN%17%9D%C4%D8%AB%A8%27%2A%06S%01%B9.%DF%00c%DC%BFD%B5%D2%E8%C9%A9%C6%84%B7%FFa" 
    name="Pago[idplanilla]" id="Pago_idplanilla" type="hidden">                                    
    <input value="K%C7%9B%838d%15V" name="Pago[tipoprocesoagilizacion]" 
    id="Pago_tipoprocesoagilizacion" type="hidden">                                    
    <input value="%F4%1E%D8%FD%BD%ACK3" name="Pago[tipotramiteprocesoagilizacion]" 
    id="Pago_tipotramiteprocesoagilizacion" type="hidden">                                                      
    <input value="%ABv%C1%91%92%E7%D1%3E%28%1A%8E%08%CFi%B2%D9%25k%89%13%B5%5EGT9nb%FDWNa%17" 
    name="Pago[tokenCSRF]" id="Pago_tokenCSRF" type="hidden">
    <input title="Pagar Obtención Express de Pasaporte Electrónico" style="border:none;width:16px;height:16px;margin-left:-20px" 
    src="/themes/saime/imagenes/pay.png" type="image" name="yt0">                            
</form>
         Chromium1.Browser.MainFrame.ExecuteJavaScript('document.getElementsByName(''yt0'')[0].click();',
      Chromium1.browser.MainFrame.GetURL, 0);
到目前为止还不错。现在我面临着一个不同的问题,可能是因为我缺乏JavaScript方面的知识

我在这个网站上有一个按钮,代码如下:

Chromium1.browser.MainFrame.ExecuteJavaScript
      ('document.getElementById(''LoginForm_username'').value="' +
      Ini.ReadString('config', 'usuario', '') + '"',
      Chromium1.browser.MainFrame.GetURL, 0);

Chromium1.Browser.MainFrame.ExecuteJavaScript('document.forms[0].submit()',
      Chromium1.browser.MainFrame.GetURL, 0);
<form style="border:none;height:16px;width:16px;margin: 0px auto 0px auto;" id="pago-form" action="?r=pago/pago/formpago" method="post">                                  
    <input value="R%0AN%17%9D%C4%D8%AB%A8%27%2A%06S%01%B9.%DF%00c%DC%BFD%B5%D2%E8%C9%A9%C6%84%B7%FFa" 
    name="Pago[idserial]" id="Pago_idserial" type="hidden">                                    
    <input value="R%0AN%17%9D%C4%D8%AB%A8%27%2A%06S%01%B9.%DF%00c%DC%BFD%B5%D2%E8%C9%A9%C6%84%B7%FFa" 
    name="Pago[idplanilla]" id="Pago_idplanilla" type="hidden">                                    
    <input value="K%C7%9B%838d%15V" name="Pago[tipoprocesoagilizacion]" 
    id="Pago_tipoprocesoagilizacion" type="hidden">                                    
    <input value="%F4%1E%D8%FD%BD%ACK3" name="Pago[tipotramiteprocesoagilizacion]" 
    id="Pago_tipotramiteprocesoagilizacion" type="hidden">                                                      
    <input value="%ABv%C1%91%92%E7%D1%3E%28%1A%8E%08%CFi%B2%D9%25k%89%13%B5%5EGT9nb%FDWNa%17" 
    name="Pago[tokenCSRF]" id="Pago_tokenCSRF" type="hidden">
    <input title="Pagar Obtención Express de Pasaporte Electrónico" style="border:none;width:16px;height:16px;margin-left:-20px" 
    src="/themes/saime/imagenes/pay.png" type="image" name="yt0">                            
</form>
         Chromium1.Browser.MainFrame.ExecuteJavaScript('document.getElementsByName(''yt0'')[0].click();',
      Chromium1.browser.MainFrame.GetURL, 0);

现在,如果我检查按钮(它是一个小图像),它会指向


问题是,这不是一个按钮,也没有ID,所以我无法通过代码单击它(我可以用鼠标单击)。但是,我如何通过代码执行这个“按钮”操作呢?

我通过使用DOM单击解决了这个问题,如下所示:

Chromium1.browser.MainFrame.ExecuteJavaScript
      ('document.getElementById(''LoginForm_username'').value="' +
      Ini.ReadString('config', 'usuario', '') + '"',
      Chromium1.browser.MainFrame.GetURL, 0);

Chromium1.Browser.MainFrame.ExecuteJavaScript('document.forms[0].submit()',
      Chromium1.browser.MainFrame.GetURL, 0);
<form style="border:none;height:16px;width:16px;margin: 0px auto 0px auto;" id="pago-form" action="?r=pago/pago/formpago" method="post">                                  
    <input value="R%0AN%17%9D%C4%D8%AB%A8%27%2A%06S%01%B9.%DF%00c%DC%BFD%B5%D2%E8%C9%A9%C6%84%B7%FFa" 
    name="Pago[idserial]" id="Pago_idserial" type="hidden">                                    
    <input value="R%0AN%17%9D%C4%D8%AB%A8%27%2A%06S%01%B9.%DF%00c%DC%BFD%B5%D2%E8%C9%A9%C6%84%B7%FFa" 
    name="Pago[idplanilla]" id="Pago_idplanilla" type="hidden">                                    
    <input value="K%C7%9B%838d%15V" name="Pago[tipoprocesoagilizacion]" 
    id="Pago_tipoprocesoagilizacion" type="hidden">                                    
    <input value="%F4%1E%D8%FD%BD%ACK3" name="Pago[tipotramiteprocesoagilizacion]" 
    id="Pago_tipotramiteprocesoagilizacion" type="hidden">                                                      
    <input value="%ABv%C1%91%92%E7%D1%3E%28%1A%8E%08%CFi%B2%D9%25k%89%13%B5%5EGT9nb%FDWNa%17" 
    name="Pago[tokenCSRF]" id="Pago_tokenCSRF" type="hidden">
    <input title="Pagar Obtención Express de Pasaporte Electrónico" style="border:none;width:16px;height:16px;margin-left:-20px" 
    src="/themes/saime/imagenes/pay.png" type="image" name="yt0">                            
</form>
         Chromium1.Browser.MainFrame.ExecuteJavaScript('document.getElementsByName(''yt0'')[0].click();',
      Chromium1.browser.MainFrame.GetURL, 0);

由于元素没有ID,我可以按名称找到它并单击它。它现在工作=)

我会迷失方向,嗅探通信,并通过POST请求直接导航到目标。这可以通过CEF实现。