Сразу нужно точные условия озвучивать)
Например, так. В списке проекта "Исходные числа" должны лежать числа "1 22 45 39 55 25 66 ...", результат в список "Числа".
//Число
int c = 57;
//Сколько брать предыдущих
int before = 6;
//Сколько брать следующих
int after = 6;
//Получаем исходный список...
Например, так:
//Число
int c = 57;
//Сколько брать предыдущих
int before = 6;
//Сколько брать следующих
int after = 6;
//Перебираем соседние числа (начинаем с число-6, заканчиваем число+6)
for (int i = c-before; i <= c+after; i++)
{
int digit = i;
//Если текущее число больше 60...
string path = @"D:\settings.xml"; //Путь экспорта
File.WriteAllText(path, ZennoPoster.ExportInputSettings(new Guid(project.TaskId)));
(!) Экспорт предназначен для запуска в ZennoPoster, не в ProjectMaker (в PM сохраняет пустой файл).
Тогда либо проверяем данные в таблице (может там сумма и должна равна единице), либо ищем несостыковки:
cells[2] - это обращение к третьему столбцу, а не ко второму (нумерация в массиве с 0).
@Serjio Leone, приветствую!
По ссылке в шапке написано, что библиотека переехала на GitHub, оттуда и можно скачать.
Про актуальность темы не совсем понял. Вроде как техническая статья, а не манимейкерская схема, к примеру, особо нечему становиться неактуальным. :)
Объявление переменной count нужно вынести за пределы внешнего цикла. Сейчас на каждой итерации внешнего цикла она объявляется заново, заново становится равна 0.
Подобными алгоритмами в XPath точно не стоит пользователя. Например, в приведенном пути зависимость аж от 10 элементов и их взаимосвязи, хотя бы 1 изменится - путь ломается. А так как объявления Директа разные (разная степень "заполненности"), структура их различается - такие пути сразу же...
Добавлю, что мистики никакой нет, просто метод Create возвращает объект FileStream, для возможности дальнейшей работы с файлом.
Поэтому можно просто сразу закрыть его методом Close. Оборачивание в юзинг, впрочем, делает практически то же самое.
File.Create(path).Close();
Соответственно, лок...
Синтаксис неправильный для этого случая, необходимо в круглые скобки основную часть пути поместить:
string xpath_exp = "(//a[contains(text(), '" + btnText + "')])[" + count + "]";
У вас ошибка в логике цикла, присмотритесь. Почему, например, с таким кодом в первый список попадут значения 1,3,5,7,9,11 вместо 1,2,3,4,5,6, неважно есть многопоток или нет?
Либо скопируй из того шаблона к себе блок директив и общего кода, либо замени в сниппетах все строчки вида:
Helper.Pause(2,5);
На подобные:
Thread.Sleep(Global.Classes.rnd.Next(2,5)*100);
В общем, в тех сниппетах используется кастомный метод паузы из общего кода, на него и ругается компилятор...
Интересный момент, не знал - не приходилось использовать их в таких случаях. Благодарю, поковыряю этот момент подробнее и после конкурса добавлю.
В том и дело, что почти в каждом сниппете на форуме с локами - используются именно эти объекты. Представители ZennoLab в ответах на форуме так же...
Вынести в файл действительно не получится, даже если общий код привязывать к одному файлу, у разных шаблонов будет своя копия кода.
Выносить в библиотеку - отличный вариант, работать будут как стандартные, но создавать их в либе можно сколько угодно, под каждый файл/ресурс.
Честно говоря, пока...
Описанный способ решения с разработчиками никак не согласовывался, но траблов быть не должно. Принцип работы локов и область видимости общего кода не раз обсуждались на форуме, ну а все утверждения в статье, разумеется, я многократно тестировал, примеры использовал на практике в своих шаблонах. :-)
Приветствую всех! :)
Сразу предупреждаю, что данная статья сугубо техническая (возможно, даже слишком для этого конкурса манимейкерских статей :ap:). Так что если что, неподготовленным умам рекомендую сразу покидать топик, не стоит мучать себя. :)
Кратко о стандартных lock'ах
Если вам...
Думаю, для этой задачи вполне можно использовать метод профиля RegenerateLogin:
//Язык генерации (Eng, Lat или Jap)
string lang = "Lat";
//Количество слогов
int sylCount = 2;
//Возвращаем сгенерированное слово
return project.Profile.RegenerateLogin(String.Format("[{0}|{1}]", lang, sylCount))...
Приветствую всех!
Представляю вашему вниманию набор открытых демонстрационных шаблонов и сниппетов ZennoPoster, предназначенных для самостоятельного изучения и использования в качестве заготовок.
Все шаблоны написаны на C#, практически весь код закомментирован, что за что отвечает.
Набор...
Greetings!
I provide the following services:
Writing C#-snippets and templates for ZennoPoster.
Consultations on working with ZennoPoster. If your question doesn't require a significant effort to answer - it's free.
Russian topic with reviews
Contacts
E-mail: [email protected]
Telegram...
Если сразу там же собирать путь из переменных ancor и nextpicture:
string path = Path.Combine(project.Directory, project.Variables["ancor"].Value, project.Variables["nextpicture"].Value+".jpg");
System.Drawing.Image img = System.Drawing.Image.FromFile(path);
Если путь уже собран в переменной...
С помощью этого свойства можно определить текущее положение курсора на странице.
//Получаем текущую координату мыши во вкладке по X
int x = instance.ActiveTab.FullEmulationMouseCurrentPosition.X;
//Получаем текущую координату мыши во вкладке по Y
int y =...
Конкретно для демонстрации методов мыши необычный вариант, но почему бы и нет. :) Добавил ещё поиск последнего поста в теме и его "чтение".
Только сорре, что к мыши не относится - тоже в коде, на кубиках разучился писать (зато почти всё закомменчено).
Прикрепляю шаблон к сообщению. Для ленивых...
Yes, C#...
//If tabs are more than one
if (instance.AllTabs.Length>1){
//Delete all and leave only the first one
for (int i=1; i<instance.AllTabs.Length; i++){
instance.AllTabs[i].Close();
i--;
}
}
С момента моих последних постов в этой теме появилось ещё несколько методов виртуальной мыши: FullEmulationMouseWheel (5.10.7.0), FullEmulationMouseDragAndDrop и FullEmulationMouseSetScrollBorder (5.11.6.0).
Давайте кратко рассмотрим эти методы.
1. FullEmulationMouseWheel
Данный метод...
It looks like a bug. It turns out that in the implementation of IZennoList comparisons occur on the contrary. In "C#-List" - (element==postLink), in IZennoList - (element.Contains(postLink)). In any case, it turns out this way in my experiments)
If you need only read IZennoList list, you can...
TeleSharp.TL.dll тоже добавь, иначе точно работать не будет. Ну и на юзинги не стоит скупиться, удобнее писать код и использовать примеры из сети. :)
Чтоб методы асинхронно работали, нужно, конечно, в Общим коде их оборачивать (как тут описано), но для последовательного выполнения в сниппете -...
Судя по коду, делается Drag-and-drop, его можно так переделать:
Tab tab = instance.ActiveTab;
HtmlElement he = tab.FindElementByAttribute("div", "class", "modal-body", "text", 0);
int leftintab = int.Parse(he.GetAttribute("leftintab"));
int topintab = int.Parse(he.GetAttribute("topintab"))...
Добавлю, что эти переменные сразу с их текущими значениями можно посмотреть в окошке "Переменные" на вкладке "Окружение", очень удобно. Справа у каждой переменной есть кнопка, при нажатии на которую макрос переменной (н-р {-Page.Url-} копируется в буфер обмена.
Если правильно понял задачу, то примерно так:
//Ищем коллекцию элементов, которые удовлетворяют заданным атрибутам капчи
var col = instance.ActiveTab.FindElementsByAttribute("img","img", "captcha","text");
//Если в коллекции есть элементы
if (col.Count>0){
//Перебираем элементы коллекции...
Как вариант, пишем в Общем коде:
public static void RegexToList(IZennoPosterProjectModel project)
{
var parse = project.Variables["api"].Value;
var regex = new Regex(@"(http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?");
var zp_list =...
Проблема в недопонимании как работает Directory.Move. Второй аргумент метода - это будущий путь перемещаемой папки, а не путь к папке, в которую нужно переместить начальную папку.
Думаю, примеры помогут понять лучше.
Перенос папки без переименования:
//Путь к папке, которую нужно переместить...
Не получается представить, каким образом эти 4 строчки могу разрывать логику проекта? Они особо ж не привязаны ни к чему, хоть в метод оформляй, точки входа-выхода заменяемы.
Приветствую!
Предоставляю услуги написания шаблонов для ZennoPoster и ZennoDroid на заказ. Основная специализация - объёмные, комплексные браузерные проекты, в которых стоит задача автоматизировать какие-либо действия с высоким уровнем эмуляции действий реального пользователя и параметров его...
Если все 5 находятся по тому пути, то так:
Tab tab = instance.MainTab;
var ab = tab.MainDocument.FindElementsByXPath("//a[contains(@class, 'link link_theme_outer other-sites__outer-link i-bem')]");
foreach (var el in ab.Elements){
project.Lists["Список 1"].Add(el.InnerHtml);
}
На основе этого сниппета:
IZennoTable table = project.Tables["Таблица 1"]; // таблица проекта
int i1 = 1; // номер столбца, по которому сортировать (приоритетный)
int i2 = 0; // номер столбца, по которому сортировать (второстепенный)
List<string> tmpList = new List<string>(); // создаем темповый...
Они должны цепляться за те элементы и их атрибуты, вероятность изменений которых на сайте максимально мала. Чаще всего это какие-либо осмысленные тексты атрибутов (например, класс 'button_find'), либо явные тексты, видные на на самой странице (тот же текст 'Поиск по картинке' вполне можно...
Добавлю, что подобные пути XPath падают от малейшего чиха в верстке страницы. Если и пользоваться автоматическими инструментами составления путей, то лучше присмотритесь к XPath Helper Wizard для хрома.
Достаточно зажать Shift и навести мышью на элемент - плагин покажет короткий путь к целевому...
Такая ошибка возникает если где-то идёт обращение к строке/ячейке с несуществующим номером. Например, в таблице 100 строк, с номерами (индексами) от 0 до 99. Если в шаблоне каким-либо образом происходит попытка прочитать/записать строку с номером, скажем, -40 или 157 (т.е. за пределами диапазона...
WindowsFormsIntegration.dll contains 'System.Windows.Forms.Integration' namespace, but not contains 'System.Windows.Forms' namespace. So, this dll doesn't contain 'Keys' enum.
So you need to add a reference to System.Windows.Forms.dll.
Вставляем данный кусок в Общий код, попутно правя ошибки и очепятки, переименовываем пространство имён, чтоб не совпадало с названием класса:
namespace Rsaa
{
public class Rsa
{
private byte[] _exponent;
private byte[] _modulus;
public string Exponent
{...
Имеется ввиду текст самого запроса, что вот тут находится (в виде конкретного значения):
Для работы в кубике, лучше все 400 запросов или 1 скленный сформировать заранее в какую-нибудь переменную, и эту переменную вставить в поле на скрине выше. Заодно и проверить текст запроса внутри неё будет...