- Регистрация
- 27.03.2014
- Сообщения
- 137
- Благодарностей
- 53
- Баллы
- 28
Некий элемент прячется очень глубоко, и выцепить его по id или любому одному атрибуту не представляется возможным. Парсить же html регулярками - ересь(подробнее расскажет гугл). Тут нам на помощь приходит XPath:
Код:
var Link = instance.ActiveTab.FindElementByXPath("//div[@class='menu']/ul/li[2]/a", 0);
По этой ссылке можно кликнуть: Link.Click();
Получить ее текст: Link.InnerHtml;
Изменить ее: Link.SetAttribute("href", "http://google.com");
Небольшое вступление в XPath можно прочитать тут: http://habrahabr.ru/post/114772/
Иногда очень нужно написать функцию, доступную в разных местах проекта. Вот как это делается:
Код:
project.Context["CAPS"] = (Func<string, string>)((Text) => {
return Text.ToUpper();
});
Код:
project.Context["CAPS"]("hello world"); // HELLO WORLD
1 - запрос к сети выполняется не сразу после нажатия кнопки, и зенка сразу же переходит к следующему действию.
2 - может быть много других аякс-запросов(например, проверка лички) и скрипт будет все время висеть в ожидании, когда же они закончатся
Мой вариант решения проблемы:
Код:
project.Context["GetEl"] = (Func<string, HtmlElement>)((XPath) => {
HtmlElement El;
for(int i = 0; i < 30; i++) {
El = instance.ActiveTab.FindElementByXPath(XPath, 0);
if(!El.IsNull) return El;
else Thread.Sleep(1000);
}
throw new Exception("Элемент " + XPath + " не найден!");
});
Код:
var GetEl = project.Context["GetEl"];
GetEl("//a[@id='process']").Click();
GetEl("//button[@id='comfirm']").Click();
Поиск данных в таблице:
Использование:
Код:
project.Context["findInTable"] = (Func<string, string, string, IEnumerable<string>>)((Table, Column, Text) => {
var Tbl = project.Tables[Table];
for(int i = 0; i < Tbl.RowCount; i++) {
if(Tbl.GetCell(Column, i).Trim() == Text.Trim()) {
return Tbl.GetRow(i);
}
}
return null;
});
Код:
//Ищем строку в таблице Users, в которой значение в первой ячейке - Vasya
var Row = project.Context["findInTable"]("Users", "A", "Vasya");
if(Row != null) {
var Surname = Row[1];
var Password = Row[2];
}
Для запуска проектов требуется программа ZennoPoster.
Это основное приложение, предназначенное для выполнения автоматизированных шаблонов действий (ботов).
Подробнее...
Для того чтобы запустить шаблон, откройте программу ZennoPoster. Нажмите кнопку «Добавить», и выберите файл проекта, который хотите запустить.
Подробнее о том, где и как выполняется проект.