JavaScript代码仅在开发人员控制台中执行时才有效

时间:2016-11-27 06:45:07

标签: javascript c# chromium chromium-embedded cefsharp

我尝试以编程方式点击 ChromiumWebBrowser 内网站上的文件输入按钮。

但是,当使用 ExecuteScriptAsync 执行JavaScript代码时,没有任何反应。

但是......当我在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 正在执行。)

1 个答案:

答案 0 :(得分:0)

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

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