//ищем элемент по xpath
var he = instance.ActiveTab.FindElementByXPath(@"//xpath", 0);
//эмулируем наведение мыши на элемент
instance.ActiveTab.FullEmulationMouseMoveToHtmlElement(he);
//кликаем
instance.ActiveTab.FullEmulationMouseClick("left","click");
//пауза 100мс
Thread.Sleep(100);
//еще раз кликаем
instance.ActiveTab.FullEmulationMouseClick("left","click");
//пауза 100мс
Thread.Sleep(100);
//и еще раз кликаем
instance.ActiveTab.FullEmulationMouseClick("left","click");
А можешь сделать поиск элемента, если не найден идет в цикл на N попыток найти, если не нашел - вышел с ошибкой, если нашел - кликнул или что-то сделал?Почему нет? Например так:
C#://ищем элемент по xpath var he = instance.ActiveTab.FindElementByXPath(@"//xpath", 0); //эмулируем наведение мыши на элемент instance.ActiveTab.FullEmulationMouseMoveToHtmlElement(he); //кликаем instance.ActiveTab.FullEmulationMouseClick("left","click"); //пауза 100мс Thread.Sleep(100); //еще раз кликаем instance.ActiveTab.FullEmulationMouseClick("left","click"); //пауза 100мс Thread.Sleep(100); //и еще раз кликаем instance.ActiveTab.FullEmulationMouseClick("left","click");
А в чем проблема?А можешь сделать поиск элемента, если не найден идет в цикл на N попыток найти, если не нашел - вышел с ошибкой, если нашел - кликнул или что-то сделал?
//ищем элемент
var he = instance.ActiveTab.FindElementByXPath(@"//xpath", 0);
//проверяем загрузку страницы в цикле (я использую такую проверку со свистком — априори нестабильным соединением )
for(int i=0; i<10;i++)
{
//если элемент не найден — ждем
if ((he.IsVoid)||(he.IsNull))
{
Thread.Sleep(5000);
}
else
{
project.SendInfoToLog("Страница прогружена", true); // выходим по зеленой и в следующем кубике делаем что нужно
break; //выходим из цикла
}
}
//если после цикла элемент по-прежнему не найден — ошибка загрузки страницы
if ((he.IsVoid)||(he.IsNull))
{
//выходим по красной и, например, пробуем загрузиться еще раз
//только делать это нужно в отдельном кубике, с ограничением кол-ва попыток, чтобы не улететь в бесконечный цикл
throw new Exception("ошибка загрузки страницы, пробуем перезагрузить");
}
А сможешь сделать на сайте OZON.ru проверку на наличие товара?А в чем проблема?
C#://ищем элемент var he = instance.ActiveTab.FindElementByXPath(@"//xpath", 0); //проверяем загрузку страницы в цикле (я использую такую проверку со свистком — априори нестабильным соединением ) for(int i=0; i<10;i++) { //если элемент не найден — ждем if ((he.IsVoid)||(he.IsNull)) { Thread.Sleep(5000); } else { project.SendInfoToLog("Страница прогружена", true); // выходим по зеленой и в следующем кубике делаем что нужно break; //выходим из цикла } } //если после цикла элемент по-прежнему не найден — ошибка загрузки страницы if ((he.IsVoid)||(he.IsNull)) { //выходим по красной и, например, пробуем загрузиться еще раз //только делать это нужно в отдельном кубике, с ограничением кол-ва попыток, чтобы не улететь в бесконечный цикл throw new Exception("ошибка загрузки страницы, пробуем перезагрузить"); }
//div[@class='top-sale-block'] — скорее всего не динамически сгенерированный класс, поэтому привязываемся к нему
var he = instance.ActiveTab.FindElementByXPath(@"//div[@class='top-sale-block']//div[contains(text(),'Товар закончился')]",0);
//если не найден
if(he.IsNull || he.IsVoid)
{
//ищем кнопку "Добавить в корзину"
he = instance.ActiveTab.FindElementByXPath(@"//div[@class='top-sale-block']//div[contains(text(),'Добавить в корзину')]",0);
//дополнительная проверка на наличие элемента
if(he.IsNull || he.IsVoid)
{
//на случай, если нет и надписи "Товар отсутствует" и кнопки "Добавить в корзину"
//Вместо исключения можно засетить какую-то переменную, которая сообщит в проект что не удалось найти ни тот ни другой элемент
throw new Exception("Ошибка поиска элемента");
}
//Если нашли div с текстом "Добавить в корзину", выходим по зеленой
project.SendInfoToLog("Товар в наличии", true);
}
//если элемент найден — значит товара нет в наличии, выходим по красной
else{throw new Exception("Товар отсутствует"); }
Отличный мануал, спасибо огромное Надо сделать на форуме раздел с примерами работы xpathХм... Элемент я бы искал вот так:
А дальше уж сами...C#://div[@class='top-sale-block'] — скорее всего не динамически сгенерированный класс, поэтому привязываемся к нему var he = instance.ActiveTab.FindElementByXPath(@"//div[@class='top-sale-block']//div[contains(text(),'Товар закончился')]",0); //если не найден if(he.IsNull || he.IsVoid) { //ищем кнопку "Добавить в корзину" he = instance.ActiveTab.FindElementByXPath(@"//div[@class='top-sale-block']//div[contains(text(),'Добавить в корзину')]",0); //дополнительная проверка на наличие элемента if(he.IsNull || he.IsVoid) { //на случай, если нет и надписи "Товар отсутствует" и кнопки "Добавить в корзину" //Вместо исключения можно засетить какую-то переменную, которая сообщит в проект что не удалось найти ни тот ни другой элемент throw new Exception("Ошибка поиска элемента"); } //Если нашли div с текстом "Добавить в корзину", выходим по зеленой project.SendInfoToLog("Товар в наличии", true); } //если элемент найден — значит товара нет в наличии, выходим по красной else{throw new Exception("Товар отсутствует"); }
Думаю это работа для цикла:Мне надо сделать 100 кликов за определённый промежуток времени, это 100 раз повторить условие в коде или есть варианты? Спасибо
//ищем элемент по xpath
var he = instance.ActiveTab.FindElementByXPath(@"//xpath", 0);
//эмулируем наведение мыши на элемент
instance.ActiveTab.FullEmulationMouseMoveToHtmlElement(he);
for(int i =0; i<100, i++)
{
//кликаем
instance.ActiveTab.FullEmulationMouseClick("left","click");
//пауза 100мс
Thread.Sleep(100);
}