Иногда следует пользоваться не режимом воспроизведения, а конструктором действий.Не работает при воспроизведении, хотя и собрано в режиме записи. Ошибки не выдает, но игнорирует загрузку картинки. Я подумал, может его можно как-то заставить.. и вот я тут. Помогите, пожалуйста.Посмотреть вложение 39449
А вот кто мне ответит, как преобразовать уже имеющийся код в кубик, без знания С# ?Иногда следует пользоваться не режимом воспроизведения, а конструктором действий.
Кубик преобразовать в код очень просто, по кубику тыкаете правой кнопкой мыши, и там будет действие, преобразовать в код.
Интересно зачем?А вот кто мне ответит, как преобразовать уже имеющийся код в кубик, без знания С# ?
Вроде нет такой функции в Зенке, преобразовать код в кубик?
Иногда следует пользоваться не режимом воспроизведения, а конструктором действий.
Кубик преобразовать в код очень просто, по кубику тыкаете правой кнопкой мыши, и там будет действие, преобразовать в код.
У меня есть пелена кода, гулялка. И чтоб вставить в середину в неё другой закрытый шаблон, необходимо чтоб, она была на кубиках. На кубиках, так-же, легче отлавливать ошибки.Интересно зачем?
//Адрес стартовой страницы
string url = "https://ru.wordpress.org/";
//Количество страниц для чтения
int pageCount = 3;
//XPath элементов для эмуляции чтения
string xpath = "//h1[string-length(text())>10]|//h2[string-length(text())>10]|//h3[string-length(text())>10]|//h4[string-length(text())>10]|//p[string-length(text())>10]";
//Переменная для определения вероятности
int chance = 0;
//Шанс пропуска блоков, в %
int chanceSkip = 70;
//Переменная для определения перехода в абзаце
bool isLinkClicked = false;
var rnd = Global.Classes.rnd;
var tab = instance.ActiveTab;
//Переходим на заданную страницу
tab.Navigate(url);
if (tab.IsBusy) tab.WaitDownloading();
Thread.Sleep(1700);
//Цикл чтения страниц (1 итерация - 1 страница)
for (int p=0; p<pageCount; p++)
{
//Ищем элементы странички для эмуляции чтения
var colTexts = tab.FindElementsByXPath(xpath);
//Вычленяем только видимые на странице элементы
var colResult = tab.FindElementsByXPath("//sngvuyrbuy");
if (colTexts.Count>0)
{
foreach (var el in colTexts.Elements)
{
int topInBrowser = int.Parse(el.GetAttribute("topInBrowser"));
int leftInBrowser = int.Parse(el.GetAttribute("leftInBrowser"));
//Если элемент видимый
if (el.Height>0 && el.Width>0 && topInBrowser>=0 && leftInBrowser>=0)
{
colResult.Add(el);
}
}
}
colTexts = colResult;
//Если коллекция пуста, выводи соответствующее сообщение в лог
if (colTexts.Count<1)
{
project.SendWarningToLog("Подходящие тексты для чтения не найдены! Страница: '"+tab.URL+"'", true);
}
int num = 1;
//В цикле проходим элементы коллекции
foreach (var elText in colTexts.Elements)
{
// Определяем, пропускать ли данный блок
chance = rnd.Next(1, 101);
//На основе выпавшего значения решаем, пропускать ли блок
if (chance <= chanceSkip)
{
//С вероятностью chanceSkip пропускаем
project.SendInfoToLog("Пропускаем чтение элемента №" + num + ", тег: "+elText.TagName);
num++;
Thread.Sleep(rnd.Next(3,9)*100);
continue;
}
// Пропускаем слишком короткие блоки с определенной вероятностью
if (elText.InnerText.Length < 100)
{
//Если длина текста блока меньше 100 символов
chance = rnd.Next(1, 101); //Случайно берём значение от 1 до 100
if (chance <= chanceSkip)
{
//С вероятностью chanceSkip не читаем его
project.SendInfoToLog("Пропускаем чтение элемента №" + num + " из-за малой длины его текста, тег: "+elText.TagName);
num++;
continue;
}
}
//Записываем в лог номер текущего элемента и название его тега
project.SendInfoToLog("Читаем элемент №" + num + ", тег: "+elText.TagName);
//Эмулируем чтение элемента
tab.FullEmulationMouseMoveAboveHtmlElement(elText, 30);
//С определенной вероятностью переходим по случайной ссылке в абзаце
var colLinks = elText.FindChildrenByXPath(".//a");
//Если в коллекции есть элементы (ссылки)
if (colLinks.Count > 0)
{
chance = rnd.Next(1, 101);
if (chance <= 3)
{
//С вероятностью 3% переходим по случайной ссылке из абзаца
var elLink = colLinks.Elements[rnd.Next(colLinks.Count)];
tab.FullEmulationMouseMoveToHtmlElement(elLink);
Thread.Sleep(rnd.Next(4,8)*100);
tab.FullEmulationMouseClick("left", "click");
if (tab.IsBusy) tab.WaitDownloading();
Thread.Sleep(rnd.Next(5,25)*100);
//Сообщаем коду ниже что перешли по ссылке
isLinkClicked = true;
//Выходим из цикла, переходим к следующей страничке
break;
}
}
//Случайная пауза между чтением блоков
chance = rnd.Next(0, 2);
if (chance==0)
{
Thread.Sleep(rnd.Next(5,50)*100);
}
num++;
}
//Если при чтении не переходили на другую страницу
if (isLinkClicked == false)
{
//Находим все элементы, содержащие ссылки
var colLinks = tab.FindElementsByXPath("//a");
//Вычленяем только видимые на странице ссылки
colResult = tab.FindElementsByXPath("//sngvuyrbuy");
if (colLinks.Count>0)
{
foreach (var el in colLinks.Elements)
{
int topInBrowser = int.Parse(el.GetAttribute("topInBrowser"));
int leftInBrowser = int.Parse(el.GetAttribute("leftInBrowser"));
if (el.Height>0 && el.Width>0 && topInBrowser>=0 && leftInBrowser>=0)
{
colResult.Add(el);
}
}
}
colLinks = colResult;
//Проверка наличия ссылок
if (colLinks.Count<1)
{
project.SendWarningToLog("Видимых ссылок на странице не найдено! "+tab.URL, true);
project.SendInfoToLog("Завершили гуляние по страницам. Количество прочитанных страниц: "+(p+1), true);
return "ok";
}
//Ведём мышку к случайному элементу со ссылкой
var elLink = colLinks.Elements[rnd.Next(colLinks.Elements.Length)];
tab.FullEmulationMouseMoveToHtmlElement(elLink);
Thread.Sleep(rnd.Next(4,8)*100);
tab.FullEmulationMouseClick("left", "click");
if (tab.IsBusy) tab.WaitDownloading();
Thread.Sleep(rnd.Next(5,25)*100);
}
project.SendInfoToLog("Завершили чтение "+ (p+1) +"-й страницы.", true);
}
project.SendInfoToLog("Завершили гуляние по страницам.", true);
Попробуй в экшене "файл для загрузки" убрать в пути "_". У меня тоже не работала загрузка картинки, думал уже баг, оказывается у меня была запятая в пути к картинкеНе работает при воспроизведении, хотя и собрано в режиме записи. Ошибки не выдает, но игнорирует загрузку картинки. Я подумал, может его можно как-то заставить.. и вот я тут. Помогите, пожалуйста.Посмотреть вложение 39449
Нет, на этом форуме нашёлА вы сами переводили ее на С#?
Создайте список. Привяжите его. И записывайте екшеном. Операции над списком, добавить строку.Demiz, спасибо, но не помогло.
Hazar, спасибо, но не нашел.
Также есть вопрос более важный, чтобы не создавать новую тему спрошу тут:
Периодически лагает запись в файл. Аккаунты регаются, подтверждаются, редактируются разными шаблонами, батниками все по кругу, но физического сохранения в файл так и не происходит. В итоге в лог вывожу готовые акки и почты и копирую в нужные файлы. капец, автоматизация! Что я упускаю?
Проверьте эту галку.Периодически лагает запись в файл. Аккаунты регаются, подтверждаются, редактируются разными шаблонами, батниками все по кругу, но физического сохранения в файл так и не происходит. В итоге в лог вывожу готовые акки и почты и копирую в нужные файлы. капец, автоматизация! Что я упускаю?
Какая у вас версия зеннопостера?Hazar, спасибо, но не нашел.
Возможно стоит откатится и проверить.Зеннопостер свежий.
Не подскажешь, как? Раньше вроде видел такую фичу, а сейчас нет (((Нашел, как преобразовывать в код
Иногда поскроллить и почитать эффективнее, чем спрашивать чуть ниже ответа на свой вопрос..Не подскажешь, как? Раньше вроде видел такую фичу, а сейчас нет (((
Эхх, каким же я нубасом был 2 года назад))Иногда следует пользоваться не режимом воспроизведения, а конструктором действий.
Кубик преобразовать в код очень просто, по кубику тыкаете правой кнопкой мыши, и там будет действие, преобразовать в код.
да говорю ж, знал об этом, встречал ранее в интерфейсе. Сегодня по своему шабну пробежался, кое как нашел кубик, который такую возможность предоставляет. И кубик этот - генератор рандомного числа. Круто, че!..Иногда поскроллить и почитать эффективнее, чем спрашивать чуть ниже ответа на свой вопрос..
а половина тех что можно преобразовать, не будут работать нормальноНасколько я понял, преобразовать в C# можно далеко не каждый кубик? Например, экшены при работе с таблицами или списками, не преобразовываются.