Random rand = new Random();
lock(SyncObjects.ListSyncer) //Лочим для много потока
{ var list = project.Lists["proxy"];
project.Variables["proxy"].Value = list[0];
list.RemoveAt(0);
list.Add(project.Variables["proxy"].Value);}
instance.SetWindowSize(1280,1024);
instance.SetProxy(project.Variables["proxy"].Value);
instance.AllowPopUp = false;
instance.UseCSS = false;
instance.DownloadFrame = false;
instance.LoadPictures = false;
instance.UseAdds = false;
lock(SyncObjects.ListSyncer) //Лочим для много потока
{ var list = project.Lists["veryGood"];
project.Variables["NUrl"].Value = list[0];
list.RemoveAt(0);
list.Add(project.Variables["NUrl"].Value);
}
string NUrl = project.Variables["NUrl"].Value;
List<char> nu = NUrl.ToArray()
.ToList();
int N = int.Parse(
nu.Where(
c=>nu.IndexOf(c)<nu.IndexOf('|')
).First(
).ToString()
);
string url = nu.Where(
c=>nu.IndexOf(c)>nu.IndexOf('|')
)
.Aggregate("",(bef,af)=>bef.ToString()+af.ToString());
var tab = instance.ActiveTab;
string http = url.Substring(0, 4);
if(http=="http"){
string domain = new Uri(url).Host;
var domains = new []{domain};
instance.SetContentPolicy("WhiteList", domains, null);
}
else{
int offset=url.IndexOf("/",0);
string domain= url.Substring(0,offset+1);
}
project.Variables["url"].Value = url;
tab.Navigate(url);
System.Threading.Thread.Sleep(500);
tab.WaitDownloading();
HtmlElement hes = instance.ActiveTab.FindElementByTag("form",N);
var k = 0;
while (hes.IsVoid && k < 15) {
System.Threading.Thread.Sleep(rand.Next(500, 1000));
hes = instance.ActiveTab.FindElementByTag("form",N);
k++;
}
if (hes.IsVoid) throw new Exception("За 15 попыток не смогли найти необходимую форму!"); // их всегда
int code = rand.Next(900,999); int num = rand.Next(000,999); int num2 = rand.Next(0,99);int num3 = rand.Next(0,99);
int countrycode = rand.Next(0,999);
project.Variables["phone"].Value = countrycode + code.ToString() + num.ToString() + num2.ToString() + num3.ToString();
//project.Variables["phone"].Value = "7" + code.ToString() + num.ToString() + num2.ToString() + num3.ToString();
string text = project.ExecuteMacro(project.Variables["spintax_mess"].Value);
project.Variables["message"].Value = Macros.TextProcessing.Spintax(text, false);
lock(SyncObjects.ListSyncer) //Лочим для много потока
{
var list = project.Lists["domain"];
project.Variables["domain"].Value = list[0];
list.RemoveAt(0);
list.Add(project.Variables["domain"].Value);
int count = rand.Next(5, 30);
string rand_link = string.Empty;
int r;
char[] chars = "abcdefghijklmnopqrstuvwxyz0123456789".ToCharArray();
for (int j = 0; j < count; j++) {
r = rand.Next(chars.Length);
rand_link += chars[r];
}
project.Variables["link"].Value = project.Variables["domain"].Value + "/" + rand_link;
}
string link = project.Variables["link"].Value;
project.Variables["message"].Value = project.Variables["message"].Value.Replace("URL", link);
text = project.ExecuteMacro(project.Variables["spintax_subj"].Value);
project.Variables["subject"].Value = Macros.TextProcessing.Spintax(text, false);
lock(SyncObjects.ListSyncer) //Лочим для много потока
{
int number = rand.Next(1, 3);
string fio;
if (number == 1 ) {
number = rand.Next(0, project.Lists["muj_fam"].Count - 1);
var muj_fam = project.Lists["muj_fam"][number];
number = rand.Next(0, project.Lists["muj_imya"].Count - 1);
var muj_imya = project.Lists["muj_imya"][number];
number = rand.Next(0, project.Lists["muj_otch"].Count - 1);
var muj_otch = project.Lists["muj_otch"][number];
project.Variables["fio"].Value = muj_fam + " " + muj_imya + " " + muj_otch;
}
else{
number = rand.Next(0, project.Lists["jen_fam"].Count - 1);
var jen_fam = project.Lists["jen_fam"][number];
number = rand.Next(0, project.Lists["jen_imya"].Count - 1);
var jen_imya = project.Lists["jen_imya"][number];
number = rand.Next(0, project.Lists["jen_otch"].Count - 1);
var jen_otch = project.Lists["jen_otch"][number];
project.Variables["fio"].Value = jen_fam + " " + jen_imya + " " + jen_otch;
}
}
lock(SyncObjects.ListSyncer) //Лочим для много потока
{
var list = project.Lists["email"];
project.Variables["email"].Value = list[0];
list.RemoveAt(0);
list.Add(project.Variables["email"].Value);
}
//////////////// БЕРЁМ ТЕМЫ И СООБЩЕНИЕ ИЗ ФАЙЛА//////////////////
lock(SyncObjects.ListSyncer) //Лочим для много потока
{
var list = project.Lists["mess"];
project.Variables["message"].Value = list[0];
list.RemoveAt(0);
string mess = project.Variables["message"].Value;
list.Add(mess);
project.Variables["message"].Value = project.Variables["message"].Value.Replace("URL", link);
}
lock(SyncObjects.ListSyncer) //Лочим для много потока
{
var list = project.Lists["subj"];
project.Variables["subject"].Value = list[0];
list.RemoveAt(0);
string subject = project.Variables["subject"].Value;
list.Add(subject);
}
//////////////// БЕРЁМ ТЕМЫ И СООБЩЕНИЕ ИЗ ФАЙЛА//////////////////
//string name = project.Variables["fio"].Value;
string name = project.Variables["email"].Value;
string phone = project.Variables["phone"].Value;
string mail = project.Variables["email"].Value;
string message = project.Variables["message"].Value;
string subj= project.Variables["subject"].Value;
string isName = "(?i)(name|имя)";//первым, т.к. name присутствует в outerHtml у всех инпутов
string isPhone="(?i)(tel|phone|fone)";
string isSubject="(?i)(subj|subject|t(h|)em(e|a)|тема|заголовок)";
string isMail="(?i)(m(a|e)il|po(4|ch)ta|почт)";//это всегда последним, т.к. email может случайно заполниться, а его обязательно указать верным
string isMessage="textarea";
List<string> regs = new List<string>{
isName,isPhone,isMail,isSubject,isMessage
};
Dictionary<string,string> regval = new Dictionary<string,string>();
regval.Add(isName,name);
regval.Add(isPhone,phone);
regval.Add(isMail,mail);
regval.Add(isSubject,subj);
regval.Add(isMessage,message);
Func<HtmlElement,string,bool> Check = (h,reg) =>
{
bool output = false;//пока в начале не найдено соответствий
string outer = h.OuterHtml; //сам инпут
//project.SendInfoToLog(outer, true);
var parent1 = h.ParentElement; //родитель
//string parent11=Convert.ToString(parent1);
//project.SendInfoToLog(parent11, true);
var parent2= parent1.ParentElement; //следующий родитель
//string parent22=Convert.ToString(parent2);
//project.SendInfoToLog(parent22, true);
if(parent1.TagName=="label"||(parent1.FindChildrenByTags("label").Count>0
&&parent1.FindChildrenByTags("input").Count==1)) //ищем тег label
outer+=parent1.OuterHtml;
if(parent2.TagName=="label"||(parent2.FindChildrenByTags("label").Count>0&& //и у второго родителя тоже
parent2.FindChildrenByTags("input").Count==1 //смотрим что не попал еще один инпут
)) //что мы не ушли в область другого поля ввода
outer+=parent2.OuterHtml;
if(Regex.IsMatch(outer,reg,RegexOptions.IgnoreCase))
output = true; //нашли соответствие
return output;
};
Action<HtmlElement,string> SetValue = (h,val) =>
{
h.Focus();
h.Click();
h.SetValue("", "none", true);
h.SetValue(val, "none", true);
};
HtmlElement form = instance.ActiveTab.FindElementByTag("form",N);
regs.ForEach(reg=>
{
form.FindChildrenByTags("input;textarea").ToList().ForEach(i=>
{
if(i.GetAttribute("type") != "submit" && i.GetAttribute("type") != "hidden") //пропускаем кнопки
{
if(Check(i,reg)) //если совпало
SetValue(i,regval[reg]);//заполняем
}
});
});
/////////// ЗАТИРАНИЕ ПРОВЕРОЧНЫХ ПОЛЕЙ ПО ВХОЖДЕНИЮ CLASS РАДИТЕЛЯ ////////////
HtmlElementCollection he = instance.ActiveTab.FindElementsByXPath("//li[contains(@class, 'gform_validation_container')]");
foreach (HtmlElement inp in he)
{
inp.FindChildrenByTags("input;textarea").ToList().ForEach(i=>
{
i.SetValue("", "none", true);//заполняем
});
}
/////////// ГАЛОЧКИ + АКТИВАЦИЯ ПОЛЯ EMAIL + ОТПРАВКА ПО ENTER ////////////
//отметим все чекбоксы
form.FindChildrenByTags("input:checkbox").ToList()
.ForEach(c=>c.SetValue("true","Full",false,false));
form.FindChildrenByTags("select").ToList()//отметим все селекты
.ForEach(sel=>
{
sel.Click();
sel.SetValue(//выберем предполследний элемент селектов
sel.FindChildrenByTags("option").ElementAt(sel.FindChildrenByTags("option").Count-1).InnerHtml
,"Middle",true,false);
});
HtmlElement heCh = form.FindChildByTag("input", N);
heCh.Click();
instance.WaitFieldEmulationDelay();
instance.SendText("{ENTER}", 23);
instance.WaitFieldEmulationDelay();
HtmlElement button = instance.ActiveTab.FindElementByTag("form", N).FindChildByAttribute("input:submit", "type", "submit", "regexp", 0);
button.Click();
System.Threading.Thread.Sleep(500);
tab.WaitDownloading();
string log = "Успешно отправили с донора: " + project.Variables["url"].Value;
project.SendInfoToLog(log, true);
System.Threading.Thread.Sleep(rand.Next(1,333));