2016-11-27 150 views
0

我试图以编程方式单击ChromiumWebBrowser内的网站上的文件输入按钮。JavaScript代码仅在开发人员控制台中执行时才有效

但是,当JavaScript代码与ExecuteScriptAsync一起执行时,没有任何反应。

但是...当我在ChromiumWebBrowser的开发者控制台中执行相同的代码行时,文件输入按钮被点击并且选择文件对话框出现。

using CefSharp; 
using CefSharp.WinForms; 
using System; 
using System.Windows.Forms; 

namespace Uploader 
{ 
    public partial class UploaderForm : Form 
    { 
     private readonly ChromiumWebBrowser webBrowser = new ChromiumWebBrowser("http://tinyupload.com/"); 

     public ImageIdentificationForm() 
     { 
      InitializeComponent(); 
      webBrowser.FrameLoadEnd += WebBrowser_FrameLoadEnd; 
      Controls.Add(webBrowser); 
     } 

     private void WebBrowser_FrameLoadEnd(object sender, FrameLoadEndEventArgs e) 
     { 
      if (e.Url == webBrowser.Address) 
      { 
       if (webBrowser.Address == "http://tinyupload.com/") 
       { 
        webBrowser.ExecuteScriptAsync("document.querySelector('[name=uploaded_file]').click();"); 
        Console.WriteLine("Executed script!"); 
       } 
      } 
     } 
    } 
} 

如何以编程点击使用ExecuteScriptAsync文件输入按钮?

顺便说一下,“执行脚本!”写在控制台中。 (所以...代码IS执行。)

回答

0

确定该按钮的那一刻ExecuteScriptAsync方法被调用的存在呢?该按钮可以由一些JS代码创建。如果是这样,这样的事情可能会有所帮助:

var button = null; 
    do { 
    button = document.querySelector('[name=uploaded_file]'); 
    } while (button == null); 
    button.click(); 
+0

这是一个好主意,我感谢你的回应。我应该提到我已经尝试了一些类似于你的想法的东西。 [(即使CefSharp Wiki声明FrameLoadEnd是在DOM加载后调用的。)](https://github.com/cefsharp/CefSharp/wiki/Frequently-asked-questions#when-can-i-start -executing的JavaScript) – Owen

相关问题