void setE(string word) { throw new Exception(word); }
int tyBrtype = 0;
string tp = instance.BrowserType.ToString().ToLower();
if (tp.Equals("chromium")) { tyBrtype = 1; }
if (tyBrtype != 1) { setE("Только для Сhromium"); }
Tab tab = instance.ActiveTab;
// Установим таймаут ожидания для поиска элементов
int timeout = 10; // Таймаут в секундах
bool elementFound = false; // Флаг, что элемент найден
HtmlElement elementToClick = null; // Элемент, по которому будем кликать
// Список XPath для поиска
string[] xpaths = new string[]
{
"//*[@id='cf-turnstile']/div",
"//input[@type='hidden' and @name='cf-turnstile-response']",
"//*[@id='NOic5']/div/div",
"//div[@style='margin-top:32px;margin-bottom:64px;']",
"//input[@name='cf-turnstile-response']",
"//div[@class='cf-turnstile']",
"//div[.//input[@name='cf-turnstile-response']]",
"//div[contains(@id, 'cf') and contains(@id, 'widget')]",
"//div[contains(@data-sitekey, '0x')]",
"//div[@class='main-wrapper']",
"/html/body/div[1]/div[1]/div[1]/div[1][//p[text()='Verify you are human by completing the action below.']]"
};
// Минимальные значения координат
int minCoord = 50;
// Цикл ожидания элементов
for (int i = 0; i < timeout; i++)
{
foreach (string xpath in xpaths)
{
// Попытка найти элемент по текущему XPath
var element = tab.FindElementByXPath(xpath, 0);
if (element != null)
{
// Проверяем координаты и видимость элемента
var coords = element.DisplacementInTabWindow;
string style = element.GetAttribute("style");
// Условие: координаты больше минимальных значений и элемент видим
if (coords.X > minCoord && coords.Y > minCoord &&
(string.IsNullOrEmpty(style) ||
(!style.Contains("display: none") && !style.Contains("visibility: hidden"))))
{
elementToClick = element;
elementFound = true;
// Логирование XPath, по которому найден элемент
project.SendInfoToLog($"Элемент найден по XPath: {xpath}", true);
break; // Элемент найден, выходим из цикла
}
}
}
if (elementFound) break; // Если элемент найден, прекращаем поиск
// Пауза перед следующей проверкой
System.Threading.Thread.Sleep(1000);
}
// Если элемент найден
if (elementFound && elementToClick != null)
{
// Пауза перед кликом (например, для стабилизации страницы)
System.Threading.Thread.Sleep(1000);
// Получение координат элемента
var coords = elementToClick.DisplacementInTabWindow;
// Клик с заданным смещением
tab.MouseClick(coords.X + 30, coords.Y + 30, "left", "click");
// Лог успешного клика
project.SendInfoToLog($"Элемент успешно найден и выполнен клик. Координаты: X={coords.X + 30}, Y={coords.Y + 30}.", true);
}
else
{
// Если ни один элемент не найден, выполняем поиск по изображению
var imgHash = "iVBORw0KGgoAAAANSUhEUgAAADAAAAA9CAYAAADrnOpZAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAETSURBVGhD7doxDoIwGIbhXye4AjsbI5wDRjgEE1fgBhyAlRHOwcrGxCkY1TbVBDUO+psvTb5nKWUgfWk0qfF0uRGP2YBt29zUP4+AKIrcLb+c3egtBqAxAI0BaAxAYwAaA9AYgMYANAagqZ2J932XaZpkWRZ7rSXLMsnzXMIwdHeO1HZgGAaZ51l18YZ55jiObvZKbQeaprFjXdcSx7G9/tW6rtJ1nX37bdu6u0fqnwGtxRv3Z33aVX4LoTEAjQFoDEBjABoD0BiAxgA0Bjwzx0At92cFQWDHd9TOxH3f218k/iFNU6mqys2O1HagLEtJkuTj2/qGWXxRFG72iv+VQGMAGgPQGIDGADQGoDEAzfMAkStWLWCMR24thgAAAABJRU5ErkJggg==";
Document mainDocument = tab.MainDocument;
if (mainDocument.IsVoid) { return -1; }
string rectangleString = tab.FindImage(imgHash, new[] { new Rectangle(0, 0, mainDocument.Width, mainDocument.Height) }, 90);
if (!String.IsNullOrWhiteSpace(rectangleString))
{
string[] split = rectangleString.Split(',');
Rectangle rectangle = new System.Drawing.Rectangle(
System.Convert.ToInt32(split[0].Trim()),
System.Convert.ToInt32(split[1].Trim()),
System.Convert.ToInt32(split[2].Trim()),
System.Convert.ToInt32(split[3].Trim()));
if (!rectangle.IsEmpty)
{
rectangle = new System.Drawing.Rectangle(rectangle.X + 30, rectangle.Y + 34, 6, 6);
tab.RiseEvent("click", rectangle, "Left");
project.SendInfoToLog("Клик по изображению выполнен успешно.", true);
}
}
else
{
project.SendInfoToLog("Элементы не найдены ни по XPath, ни по изображению.", true);
}
}