2016-11-27 61 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

相關問題