CefSharp программно нажать на кнопку

684
01 июня 2017, 06:23

Доброго времени суток, не подскажите, как программно нажать на кнопку использую cefsharp (chromium), код кнопки

<button type="submit" class="button-download">Скачать 4.22 Mb<br/>по прямой ссылке</button>

Нужен пример именно с CefSharp, простой webbrowser тут не поможет, к сожалению. Можете помочь ?

код, который на данный момент я имею

public class DownloadHandler : IDownloadHandler
        {
            public event EventHandler<DownloadItem> OnBeforeDownloadFired;
            public event EventHandler<DownloadItem> OnDownloadUpdatedFired;
            public void OnBeforeDownload(IBrowser browser, DownloadItem downloadItem, IBeforeDownloadCallback callback)
            {
                OnBeforeDownloadFired?.Invoke(this, downloadItem);
                if (!callback.IsDisposed)
                {
                    using (callback)
                    {
                        callback.Continue(@"C:\Users\ABS\Downloads\" +
                                downloadItem.SuggestedFileName,
                            showDialog: false);
                    }
                }
            }
            public void OnDownloadUpdated(IBrowser browser, DownloadItem downloadItem, IDownloadItemCallback callback)
            {
                OnDownloadUpdatedFired?.Invoke(this, downloadItem);
            }
        }
        public ChromiumWebBrowser chromeBrowser;
        public void InitializeChromium()
        {
            CefSettings settings = new CefSettings();
            // Initialize cef with the provided settings
            Cef.Initialize(settings);
            // Create a browser component
            chromeBrowser = new ChromiumWebBrowser("http://link.ru");
            chromeBrowser.DownloadHandler = new DownloadHandler();
            // Add it to the form and fill it to the form window.
            this.Controls.Add(chromeBrowser);
            chromeBrowser.Dock = DockStyle.Fill;
        }
Answer 1

document.querySelector('.button-download').click()
<button type="submit" class="button-download" onclick="alert('Кнопка нажата.')">Скачать 4.22 Mb<br/>по прямой ссылке</button>

Вам нужно дождаться, когда браузер выполнит инициализацию, прежде чем выполнять большинство вещей, включая выполнение javascript. Вы можете подключить события FrameLoadEnd / LoadingStateChanged / IRenderProcessMessageHandler.OnContextCreated и сделать что-то вроде этого.

chromeBrowser.FrameLoadEnd += OnIsBrowserInitializedChanged;
private void OnIsBrowserInitializedChanged(object sender, IsBrowserInitializedChangedEventArgs args)
{
    if(args.IsBrowserInitialized)
    {
        browser.ExecuteScriptAsync("document.querySelector('.button-download').click()");
    }
}

Больше примеров в официальной справке

READ ALSO
DDD repository/facade implementation + bounded context relationship

DDD repository/facade implementation + bounded context relationship

Вопрос в следующем, как лучше реализовать механизм Include?

321
Почему WrapPanel не работает внутри ScrollViewer с VerticalScrollBarVisibility=&ldquo;Auto&rdquo;?

Почему WrapPanel не работает внутри ScrollViewer с VerticalScrollBarVisibility=“Auto”?

Ориентация WrapPanel перекрываетсяВ результате вместо столбцов получается обычная прокрутка вниз

196
Как инвертировать прокрутку между VerticalScrollBar и HorizontalScrollBar?

Как инвертировать прокрутку между VerticalScrollBar и HorizontalScrollBar?

Как инвертировать прокрутку между VerticalScrollBar и HorizontalScrollBar ?

228
Формат времени в DateTimePicker не понимает tt

Формат времени в DateTimePicker не понимает tt

Попытка установить кастомный формат времени для DateTimePicker не дает нужного результатаДокументация по компоненту говорит, что для показа AM/PM нужно...

336