我尝试以编程方式点击 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 正在执行。)
答案 0 :(得分:0)
您确定在调用ExecuteScriptAsync方法时该按钮是否存在?该按钮可以由一些JS代码创建。如果这是真的,这样的事情可能会有所帮助:
var button = null;
do {
button = document.querySelector('[name=uploaded_file]');
} while (button == null);
button.click();