Ответ выше работает нормально. Я просто хотел бы добавить некоторую информацию, которую я считаю очень важной...
Имитировать щелчок мышью (и перемещение):
// get browser host
var wbHost = chromiumWebBrowser1.GetBrowser().GetHost();
// clicking cordinates
int xPosition = 100;
int yPosition = 300;
// send mouse move event
wbHost.SendMouseMoveEvent(xPosition, yPosition, false, CefEventFlags.None);
Thread.Sleep(50);
// send click
wbHost.SendMouseClickEvent(xPosition, yPosition, MouseButtonType.Left, false, 1, CefEventFlags.None);
Thread.Sleep(50);
wbHost.SendMouseClickEvent(xPosition, yPosition, MouseButtonType.Left, true, 1, CefEventFlags.None);
1 - Иногда (особенно в средах с защитой от краулеров) необходимо также имитировать движение мыши. Я делаю это с помощью метода SendMouseMoveEvent
, как показано в первой строке.
2 - Щелчок происходит по указанным координатам x
и y
, но очень важно знать, что эти координаты относятся к окну компонента браузера (области просмотра). Таким образом, если ваш компонент веб-браузера имеет высоту всего 100px
и вы отправляете команду щелчка по координате y
как 150px
, щелчок произойдет но вне веб-браузера, следовательно, не на веб-странице.
3 - Один трюк, чтобы увидеть, действительно ли выполняется щелчок и где именно, изменить его с MouseButtonType.Left
на MouseButtonType.Right
. Сделав это, если на веб-странице нет ограничений, вы сможете увидеть меню правой кнопки мыши. Если вы щелкаете снаружи, есть вероятность, что вы увидите меню правой кнопки мыши в ОС (Windows здесь, и я смог увидеть, что с помощью этого трюка я щелкнул за пределами своего компонента) .
4 - true
и false
на SendMouseClickEvent
должны отправлять событие нажатия кнопки мыши вниз и событие нажатия кнопки мыши вверх соответственно.
5. Чтобы получить позицию объекта в DOM, вы можете использовать подход к моему ответу здесь:
щелчок по элементу веб-страницы CefSharp
6 - Итак, если у вас в компоненте загружена очень высокая страница, и вам нужно нажать на кнопку, действительно находящуюся за пределами компонента, вам нужно прокрутить веб-страницу. Вы можете сделать это с помощью кода ниже:
Имитировать прокрутку мыши (событие колесика мыши):
// send scroll command
// (mouse position X, mouse position Y, how much to scroll X, how much to scroll Y, events)
chromiumWebBrowser1.GetBrowser().GetHost().SendMouseWheelEvent(10, 10, 0, -100, CefEventFlags.None);
Thread.Sleep(300);
Большая часть параметров не требует пояснений, но наиболее важной частью здесь являются 3-й и 4-й параметры, которые определяют, насколько прокручивать X и сколько прокручивать Y. Чтобы прокрутить вниз, просто используйте отрицательные значения, а чтобы прокрутите вверх, положительные. В приведенном выше коде ничего не прокручивается (ноль пикселей) по горизонтали (ось x
) и на 100 пикселей вниз по вертикали (ось y
).
Вы можете использовать этот код внутри loop
, чтобы прокручивать столько, сколько вам нужно. Я использую его в сочетании с кодом JavaScript, чтобы получить положение кнопки, чтобы определить, находится ли она в области просмотра или мне нужно снова отправить событие прокрутки.
person
Vitox
schedule
06.12.2020
CefSharp.Wpf.Example
, ставя точки останова в методы щелчка мыши, чтобы посмотреть, что оно делает? По памяти, я думаю, вы обнаружите, что вам нужно отправить два события: вниз, за которым следует вверх. То же самое относится и к нажатиям клавиш. - person amaitland   schedule 01.07.2015