Сниппеты

ZennoPoster это действительно тот инструмент, который обязан быть у каждого вебмастера и манимейкера. Недешевый, но свою цену от отрабатывает на 1000%.

Сразу после покупки я использовал только стандартные экшены, и шаблоны получались ну очень большими. Но потом наткнулся на очень интересную тему на официальном форуме, и понял, что я все делал не так. Гы. А именно, не использовал вставки на C#, что очень и очень сильно расширяет возможности и удобство использования программы.

Я не претендую на звание гуру, да и большая часть сниппетов взята с оф форума (тема 1 и тема 2). Здесь я приведу некоторые полезные сниппеты, которые использую сам. Некоторые взяты с форума, другие найдены или написаны мной. Итак, поехали.

Потребуется библиотека Renci.SshNet

Выполним команду на изменение прав доступа

string ip = "xx.xx.xx.xx";
int port = 22;
string login = "root";
string pass = "password";
string command = "chmod -R 777 /home/www/";
var connectionInfo = new ConnectionInfo(ip,port,login, new PasswordAuthenticationMethod(login, pass));
try {
using (SshClient ssh = new SshClient(connectionInfo))
{
ssh.ConnectionInfo.Timeout = TimeSpan.FromSeconds(5);
ssh.Connect();
if (ssh.IsConnected)
{
ssh.RunCommand(command);
ssh.Disconnect();
}
}
} catch (Exception ex){
throw new Exception(ex.Message.ToString());
}

Выполняет парсинг строки content по регулярному выражению regexp и заменяет на пустую строку string.Empty.

string result = Regex.Replace(content, @"regexp", string.Empty);

Выполняет парсинг строки content по регулярному выражению regexp и возвращает первое (нулевое) найденное.

string res = Regex.Match(content,@"regexp", RegexOptions.Singleline).Groups[0].Value;
System.Diagnostics.ProcessStartInfo processStartInfo = new System.Diagnostics.ProcessStartInfo(); 
processStartInfo.CreateNoWindow = true; 
processStartInfo.FileName ="C:\\soft\\curl\\curl.exe"; 
processStartInfo.Arguments = project.Variables["ARGUMENTS"].Value.Trim(); 
processStartInfo.UseShellExecute = false; 
processStartInfo.RedirectStandardOutput = true; 
System.Diagnostics.Process process = new System.Diagnostics.Process(); 
process.StartInfo = processStartInfo; 
process.Start(); 
string output = process.StandardOutput.ReadToEnd().Trim(); 
process.WaitForExit(); 
if (process.ExitCode != 0) { throw new Exception("ERROR"); 
} return output;

Разбиваем строку по разделителю и раскидываю полученные части по переменным. Очень полезно для получения данных из файла.

string source = project.Variables["source_string"].Value; 
var reg_data = source .Split('|').ToList(); 
project.Variables["login"].Value = reg_data[0]; 
project.Variables["mail"].Value = reg_data[1]; 
project.Variables["url"].Value = reg_data[2];

Возвращает текущее время в формате UNIX

int unixTime = (int)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds;
return unixTime;

Возвращает текущее время

return DateTime.Now.ToString("yyyy-MM-dd H:mm:ss");

Находит все элементы, удаляет элементы с нулевыми или отрицательными координатами, передвигает мышь в к выбранному (по умолчанию нулевому) элементу и кликает. Если элементов нет, то выкидывает ошибку.

if (instance.ActiveTab.IsBusy) instance.ActiveTab.WaitDownloading();
var collect = instance.ActiveTab.FindElementsByAttribute("a","href","value","text");
for (int i = 0; i < collect.Count; i++){
 var tmpelement = collect.GetByNumber(i);
 if ((int.Parse(tmpelement.GetAttribute("top"))<1)|(int.Parse(tmpelement.GetAttribute("left"))<1)){
 collect.Remove(i);
 i--;
 }
}
if (collect.Count==0) throw new Exception("no elements on page");
//return collect.Count;
var element = collect.GetByNumber(0);
instance.ActiveTab.FullEmulationMouseMoveToHtmlElement(element);
instance.ActiveTab.FullEmulationMouseClick("left", "click");
string timezone = ZennoPoster.HttpGet("http://ip-api.com/line?fields=timezone", instance.GetProxy(), "UTF-8", ZennoLab.InterfacesLibrary.Enums.Http.ResponceType.BodyOnly).Trim();
instance.SetIanaTimezone(timezone,ZennoLab.InterfacesLibrary.Enums.Browser.TimezoneMode.Emulate);