// Объявляем tab
Tab tab = instance.ActiveTab;
// Заводим цикл
for (int i = 0; i < 10; i++)
{
// Проверяем кнопку
if (!tab.FindElementByXPath(".//*",0).IsNull)
{
tab.FindElementByXPath(".//*",0).Click("Full"); // Кликаем
Thread.Sleep(5 * 1000); // Пауза
}
// Проверяем нужный элемент и если нашли, то выходим из цикла
if (!tab.FindElementByXPath(".//[*]",0).IsNull) break;
}
Все равно не могу понять как правильно его реализовать, вот мои пути, принцип такой что при переходе на каждый ишем регуляркой текст, если нашли то выходит по Good если нет идем по следующим xpathВроде подобного, главное проверяйте наличие элементов через if.
C#:// Объявляем tab Tab tab = instance.ActiveTab; // Заводим цикл for (int i = 0; i < 10; i++) { // Проверяем кнопку if (!tab.FindElementByXPath(".//*",0).IsNull) { tab.FindElementByXPath(".//*",0).Click("Full"); // Кликаем Thread.Sleep(5 * 1000); // Пауза } // Проверяем нужный элемент и если нашли, то выходим из цикла if (!tab.FindElementByXPath(".//[*]",0).IsNull) break; }
// Текст для обработки
string text = project.ExecuteMacro(instance.ActiveTab.GetSourceText("utf-8"));
var errorIfEmpty = true;
var regexGroups = Macros.TextProcessing.Regex(text, @project.Variables["domain"].Value + "[\\w\\W]*?", "0");
if (regexGroups.Count == 0)
{
if (errorIfEmpty) throw new Exception();
}
else
{
project.Variables["checksource"].Value = regexGroups[0].FirstOrDefault();
}
Tab tab = instance.ActiveTab;
// Текст для обработки
string text = project.ExecuteMacro(instance.ActiveTab.GetSourceText("utf-8"));
var errorIfEmpty = true;
var regexGroups = Macros.TextProcessing.Regex(text, @project.Variables["domain"].Value + "[\\w\\W]*?", "0");
//если по регулярке ничего не нашли, идем на другие страницы
if (regexGroups.Count == 0)
{
for(int i=2;i<11;i++)
{
//переходим на следующую стр
tab.FindElementByXPath($"//a[@class='b_widePag sb_bp'][contains(text(),'{i}')]", 0).Click();
tab.WaitDownloading();
//ищем регулярку. Если нашли покинь цикл
regexGroups = Macros.TextProcessing.Regex(text, @project.Variables["domain"].Value + "[\\w\\W]*?", "0");
if (regexGroups.Count != 0)
{
project.Variables["checksource"].Value = regexGroups[0].FirstOrDefault();
break;
}
}
}
Еще хотел бы уточнить момент как сделать выход по красной ветке если прошли все 10 страниц и ничего не нашли, сейчас цикл завершается по зеленой если итерация завершена и ничего не найдено, еще момент по поводу вывода в лог значения итерации (номер страницы на которой ищем), как я понимаю номер страницы у нас в переменной итерации i но что то не получается вывести в лог цифровое значениеC#:Tab tab = instance.ActiveTab; // Текст для обработки string text = project.ExecuteMacro(instance.ActiveTab.GetSourceText("utf-8")); var errorIfEmpty = true; var regexGroups = Macros.TextProcessing.Regex(text, @project.Variables["domain"].Value + "[\\w\\W]*?", "0"); //если по регулярке ничего не нашли, идем на другие страницы if (regexGroups.Count == 0) { for(int i=2;i<11;i++) { //переходим на следующую стр tab.FindElementByXPath($"//a[@class='b_widePag sb_bp'][contains(text(),'{i}')]", 0).Click(); tab.WaitDownloading(); //ищем регулярку. Если нашли покинь цикл regexGroups = Macros.TextProcessing.Regex(text, @project.Variables["domain"].Value + "[\\w\\W]*?", "0"); if (regexGroups.Count != 0) { project.Variables["checksource"].Value = regexGroups[0].FirstOrDefault(); break; } } }
Tab tab = instance.ActiveTab;
// Текст для обработки
string text = project.ExecuteMacro(instance.ActiveTab.GetSourceText("utf-8"));
var errorIfEmpty = true;
var regexGroups = Macros.TextProcessing.Regex(text, @project.Variables["domain"].Value + "[\\w\\W]*?", "0");
//если по регулярке ничего не нашли, идем на другие страницы
bool flag = false; //флажок, чтобы отследить, нашли ли что-то
if (regexGroups.Count == 0)
{
for(int i=2;i<11;i++)
{
//переходим на следующую стр
tab.FindElementByXPath($"//a[@class='b_widePag sb_bp'][contains(text(),'{i}')]", 0).Click();
tab.WaitDownloading();
project.SendInfoToLog($"Пробуем xpath - //a[@class='b_widePag sb_bp'][contains(text(),'{i}')]", true); //вывод в лог
//ищем регулярку. Если нашли покинь цикл
regexGroups = Macros.TextProcessing.Regex(text, @project.Variables["domain"].Value + "[\\w\\W]*?", "0");
if (regexGroups.Count != 0)
{
project.Variables["checksource"].Value = regexGroups[0].FirstOrDefault();
project.SendInfoToLog($"нашли нужный xpath - //a[@class='b_widePag sb_bp'][contains(text(),'{i}')]", true); //вывод в лог
flag = true;
break;
}
}
if(!flag) throw new Exception("Ничего не нашли"); //выход по ошибке
}
Все гуд кроме 24 строки, при нахождении не получил уведомления в лог project.SendInfoToLog($"нашли нужный xpath - //a[@class='b_widePag sb_bp'][contains(text(),'{i}')]", true); //вывод в логЕсли нигде не накосячил (тестить лень было):
C#:Tab tab = instance.ActiveTab; // Текст для обработки string text = project.ExecuteMacro(instance.ActiveTab.GetSourceText("utf-8")); var errorIfEmpty = true; var regexGroups = Macros.TextProcessing.Regex(text, @project.Variables["domain"].Value + "[\\w\\W]*?", "0"); //если по регулярке ничего не нашли, идем на другие страницы bool flag = false; //флажок, чтобы отследить, нашли ли что-то if (regexGroups.Count == 0) { for(int i=2;i<11;i++) { //переходим на следующую стр tab.FindElementByXPath($"//a[@class='b_widePag sb_bp'][contains(text(),'{i}')]", 0).Click(); tab.WaitDownloading(); project.SendInfoToLog($"Пробуем xpath - //a[@class='b_widePag sb_bp'][contains(text(),'{i}')]", true); //вывод в лог //ищем регулярку. Если нашли покинь цикл regexGroups = Macros.TextProcessing.Regex(text, @project.Variables["domain"].Value + "[\\w\\W]*?", "0"); if (regexGroups.Count != 0) { project.Variables["checksource"].Value = regexGroups[0].FirstOrDefault(); project.SendInfoToLog($"нашли нужный xpath - //a[@class='b_widePag sb_bp'][contains(text(),'{i}')]", true); //вывод в лог flag = true; break; } } if(!flag) throw new Exception("Ничего не нашли"); //выход по ошибке }
прописал первой строкойПопробуй первой же строчкой вывести в лог любое сообщение. Если не выйдет то глюк
значит регулярка не находит ничего.прописал первой строкой
project.SendInfoToLog("тест", true); в логе отобразило корректно, не отображает именно 24 строку когда нашли переменную domain на странице.
Проект простой в переменной domain домен вида domain.com, заходим на страницу bing.com и вбиваем любой кей и выполняем код выше(для снятия позиций выдачи)
Ничего не вывелозначит регулярка не находит ничего.
в лог выводи сколько нашлось и увидишь что почем
project.SendInfoToLog($"найдено {regexGroups.Count}", true);
}
Что то поломалось в коде, до этого все стабильно работало, не могу понять в чем делоЕсли нигде не накосячил (тестить лень было):
C#:Tab tab = instance.ActiveTab; // Текст для обработки string text = project.ExecuteMacro(instance.ActiveTab.GetSourceText("utf-8")); var errorIfEmpty = true; var regexGroups = Macros.TextProcessing.Regex(text, @project.Variables["domain"].Value + "[\\w\\W]*?", "0"); //если по регулярке ничего не нашли, идем на другие страницы bool flag = false; //флажок, чтобы отследить, нашли ли что-то if (regexGroups.Count == 0) { for(int i=2;i<11;i++) { //переходим на следующую стр tab.FindElementByXPath($"//a[@class='b_widePag sb_bp'][contains(text(),'{i}')]", 0).Click(); tab.WaitDownloading(); project.SendInfoToLog($"Пробуем xpath - //a[@class='b_widePag sb_bp'][contains(text(),'{i}')]", true); //вывод в лог //ищем регулярку. Если нашли покинь цикл regexGroups = Macros.TextProcessing.Regex(text, @project.Variables["domain"].Value + "[\\w\\W]*?", "0"); if (regexGroups.Count != 0) { project.Variables["checksource"].Value = regexGroups[0].FirstOrDefault(); project.SendInfoToLog($"нашли нужный xpath - //a[@class='b_widePag sb_bp'][contains(text(),'{i}')]", true); //вывод в лог flag = true; break; } } if(!flag) throw new Exception("Ничего не нашли"); //выход по ошибке }
Учи основы C#.Что то поломалось в коде, до этого все стабильно работало, не могу понять в чем дело
Tab tab = instance.ActiveTab;
instance.ActiveTab.Navigate("https://www.","");
instance.ActiveTab.WaitDownloading();
// Текст для обработки
string text = project.ExecuteMacro(instance.ActiveTab.DomText);
var errorIfEmpty = true;
var regexGroups = Macros.TextProcessing.Regex(text, @project.Variables["domain"].Value + "[\\w\\W]*?", "0");
project.SendInfoToLog("Проверяем наличие ссылки на странице", true);
var rnd = new Random();
//если по регулярке ничего не нашли, идем на другие страницы
bool flag = false; //флажок, чтобы отследить, нашли ли что-то
if (regexGroups.Count == 0)
{
for(int i=2;i<11;i++)
{
//переходим на следующую стр
//text = project.ExecuteMacro(instance.ActiveTab.GetSourceText("utf-8"));
var elButton = instance.ActiveTab.FindElementByXPath($"//a[@class='b_widePag sb_bp'][contains(text(),'{i}')]", 0); //Находим элемент кнопки
int topInBrowser = int.Parse(elButton.GetAttribute("topInBrowser")); //Определяем, на каком расстоянии от верха страницы находится кнопка
instance.ActiveTab.FullEmulationMouseWheel(0, topInBrowser); //Делаем прокрутку на это расстояние
instance.ActiveTab.FullEmulationMouseMoveToHtmlElement(elButton); //Ведём курсор мышки к кнопке
//instance.ActiveTab.FullEmulationMouseClick("left", "click"); //Кликаем
tab.FindElementByXPath($"//a[@class='b_widePag sb_bp'][contains(text(),'{i}')]", 0).Click();
instance.ActiveTab.WaitDownloading(); // Ожидание загрузки
System.Threading.Thread.Sleep(rnd.Next(1, 2) * 1000); // Пауза 2-3 сек
//tab.WaitDownloading();
project.SendInfoToLog($"Пробуем xpath - //a[@class='b_widePag sb_bp'][contains(text(),'{i}')]", true); //вывод в лог
//ищем регулярку. Если нашли покинь цикл
regexGroups = Macros.TextProcessing.Regex(text, @project.Variables["domain"].Value + "[\\w\\W]*?", "0");
if (regexGroups.Count != 0)
{
project.Variables["checksource"].Value = regexGroups[0].FirstOrDefault();
//project.SendInfoToLog($"нашли нужный xpath - //a[@class='b_widePag sb_bp'][contains(text(),'{i}')]", true); //вывод в лог
flag = true;
break;
}
}
if(!flag) throw new Exception("Ничего не нашли"); //выход по ошибке
}