#c# #cefsharp
#c# #cefsharp
Вопрос:
Я в недоумении, просмотрев соответствующие сообщения и документацию, у многих других, похоже, были похожие проблемы, но ни одно из существующих решений не приводит к тому, что какие-либо нажатия клавиш фактически распознаются браузером.
Весь мой код приведен ниже, просто пустая форма, пытающаяся ввести имя пользователя / пароль на веб-сайте, на котором в настоящее время нет API, но он появится. Так что это всего лишь исправление проблемы, пока их API не будет доработан. В основном просто нужно войти в систему и отправить нажатия клавиш на веб-сайт, но, похоже, ничего не работает.
Я также пробовал: https://ourcodeworld.com/articles/read/520/simulating-keypress-in-the-right-way-using-inputsimulator-with-csharp-in-winforms
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using CefSharp;
using CefSharp.WinForms;
namespace Hydros_tmp_api
{
public partial class Form1 : Form
{
public ChromiumWebBrowser chromeBrowser;
string CurrentAddress = "";
public void InitializeChromium()
{
CefSettings settings = new CefSettings();
// Initialize cef with the provided settings
Cef.Initialize(settings);
// Create a browser component
chromeBrowser = new ChromiumWebBrowser("https://www.coralvuehydros.com/app/#/status");
// Add it to the form and fill it to the form window.
Controls.Add(chromeBrowser);
chromeBrowser.Dock = DockStyle.Fill;
(chromeBrowser).LoadingStateChanged = Browser_FrameLoadEnd;
chromeBrowser.AddressChanged = Browser_AddressChanged;
}
public Form1()
{
InitializeComponent();
InitializeChromium();
}
private void Form1_Load(object sender, EventArgs e)
{
}
async void Browser_FrameLoadEnd(object sender, LoadingStateChangedEventArgs e)
{ // Jumps in here when the page is fully loaded:
if (e.IsLoading == false)
{
if (CurrentAddress.Contains("login"))
{
timer_login.Enabled = true;
}
}
}
private void Browser_AddressChanged(object sender, AddressChangedEventArgs e)
{
CurrentAddress = e.Address;
}
private void timer_login_Tick(object sender, EventArgs e)
{
timer_login.Enabled = false;
chromeBrowser.GetBrowserHost().SetFocus(true);
Random rnd = new Random();
chromeBrowser.GetBrowser().GetHost().SendKeyEvent(new KeyEvent
{
WindowsKeyCode = (int)Keys.Tab, // Enter
FocusOnEditableField = true,
IsSystemKey = false,
Type = KeyEventType.KeyDown
});
System.Threading.Thread.Sleep(rnd.Next(20, 120));
chromeBrowser.GetBrowser().GetHost().SendKeyEvent(new KeyEvent
{
WindowsKeyCode = (int)Keys.Tab, // Enter
FocusOnEditableField = true,
IsSystemKey = false,
Type = KeyEventType.KeyUp
});
System.Threading.Thread.Sleep(rnd.Next(20, 120));
chromeBrowser.GetBrowser().GetHost().SendKeyEvent(new KeyEvent
{
WindowsKeyCode = (int)Keys.T, // Enter
FocusOnEditableField = true,
IsSystemKey = false,
Type = KeyEventType.KeyDown
});
System.Threading.Thread.Sleep(rnd.Next(20, 120));
chromeBrowser.GetBrowser().GetHost().SendKeyEvent(new KeyEvent
{
WindowsKeyCode = (int)Keys.T, // Enter
FocusOnEditableField = true,
IsSystemKey = false,
Type = KeyEventType.KeyUp
});
System.Threading.Thread.Sleep(rnd.Next(20, 120));
}
}
}
Редактировать: похоже, это особая странность с их веб-сайтом, который не принимает имитированный ввод, потому что он отлично работает на других сайтах? Так что я знаю, куда идти дальше.
Комментарии:
1. Возможно, вы захотите попробовать другой подход. Запустите fiddler, запишите, что отправляется. Повторите в своем коде с помощью httpwebclent . Код будет проще и стабильнее.
2. Из-за того, как этот конкретный веб-сайт рисует себя с помощью canvas и тому подобное, я действительно не думаю, что это достижимо в httpwebclient.
3. Работает ли веб-сайт, если вы используете версию WPF и используете клавиатуру и мышь, как обычно? Версия WPF использует sendKeyEvent внутренне для обработки всех нажатий клавиш. Вы можете протестировать с github.com/cefsharp/CefSharp.MinimalExample
4. Вы можете добавить некоторые записи в github.com/cefsharp/CefSharp/blob/cefsharp/87/CefSharp.Wpf /…
5. Веб-сайт работает нормально, если я набираю вручную, просто не с помощью программного ввода. как с использованием WPF, так и с минимальными последствиями