using System; using System.Collections.Generic; using System.Linq; using System.Text; using sharpknife.Controls; #if WIN32 using MSHTML; #else using mshtml; #endif using System.Windows.Navigation; using System.Threading; using sharpknife.Utils; using sharpknife.Data; namespace sharpknife.Commands { public class KingoLottoCommand : Command { // TODO: // - add check for availability of selected prizes private WebBrowserControl browser; private PTCSource source; private int counter = 0; public KingoLottoCommand() { this.Group = "Browser"; this.Timeout = 5 * 60; browser = WebBrowserControl.GetWebBrowserControl(); source = PTCSource.GetSource("KingoLotto"); } public override void Execute() { base.Execute(); browser.LoadCompleted += ParseAdsCommand_LoadCompleted; Debug = "Navigating"; browser.Navigate("http://it.kingolotto.com/play.php"); } void ParseAdsCommand_LoadCompleted(object sender, NavigationEventArgs e) { if (e.Uri.AbsoluteUri.IndexOf("http://it.kingolotto.com/subscribe.html", StringComparison.InvariantCultureIgnoreCase) >= 0) { Debug = "Login"; IHTMLElementCollection inputFields = HtmlUtils.GetElementCollection(browser.Document, "input"); IHTMLInputElement button = null; foreach (IHTMLInputElement element in inputFields) { if (element.name == "email") { element.value = source.Username; } else if (element.name == "pass") { element.value = source.Password; } else if (((IHTMLElement)element).className == "btnLogin") { button = element; } } button.form.submit(); return; } else if (e.Uri.AbsoluteUri.IndexOf("http://it.kingolotto.com/dmbp.php", StringComparison.InvariantCultureIgnoreCase) >= 0) { Debug = "Dumb page"; browser.Navigate("http://it.kingolotto.com/play.php"); return; } else if (e.Uri.AbsoluteUri.IndexOf("http://it.kingolotto.com/play.php#", StringComparison.InvariantCultureIgnoreCase) >= 0) { Debug = "Play page"; return; } else if (e.Uri.AbsoluteUri.IndexOf("http://it.kingolotto.com/nomore.php", StringComparison.InvariantCultureIgnoreCase) >= 0) { Debug = "No more"; browser.LoadCompleted -= ParseAdsCommand_LoadCompleted; StatusLog statusLog = StatusLog.Get("extra2"); statusLog.Status = StatusLog.StatusCodes.Complete; statusLog.Save(); Status = StatusCode.Completed; return; } if (StringUtils.Contains(e.Uri.AbsoluteUri, "http://it.kingolotto.com/play.php")) { if (counter < 10) { Debug = string.Format("Counter: {0}", counter); counter++; ParseCards(); } else { browser.LoadCompleted -= ParseAdsCommand_LoadCompleted; Status = StatusCode.Completed; } } else { int i = 0; //while (i < 10) { Thread.Sleep(1000); Debug = string.Format("Sleeping {0}s", i); i++; } Debug = "Navigating"; browser.Navigate("http://it.kingolotto.com/play.php"); } } private void ParseCards() { IHTMLDocument2 dom = browser.Document; string body = browser.Html; IHTMLElementCollection links = ((IHTMLElementCollection)dom.body.all).tags("a"); IHTMLElementCollection divs = ((IHTMLElementCollection)dom.body.all).tags("div"); foreach (IHTMLAnchorElement a in links) { //string onclick = a string href = a.href; IHTMLElement element = (IHTMLElement)a; string text = element.innerText; if (!string.IsNullOrEmpty(text) && text.IndexOf("Selezione", StringComparison.InvariantCultureIgnoreCase) >= 0 && text.IndexOf("casuale", StringComparison.InvariantCultureIgnoreCase) >= 0) { //Scheduler.GetScheduler().Commands.Add(new NotifyCommand("Click!")); element.click(); } //if (href != null && href.IndexOf("favorite.php", StringComparison.InvariantCultureIgnoreCase) >= 0 // //|| href.IndexOf("#kingoloto", StringComparison.InvariantCultureIgnoreCase) >= 0 // ) // Scheduler.GetScheduler().Commands.Add(new NotifyCommand("HREF!")); //if (!string.IsNullOrEmpty(onclick) && onclick.IndexOf("return(numbersRandomSelect())", StringComparison.InvariantCultureIgnoreCase) >= 0) //if (!string.IsNullOrEmpty(onclick) && onclick.IndexOf("Selezione
casuale", StringComparison.InvariantCultureIgnoreCase) >= 0) //{ // Scheduler.GetScheduler().Commands.Add(new NotifyCommand("Click!")); // //a.click(); //} } int selectedBanner = (new Random().Next(4)) + 1; foreach (IHTMLElement div in divs) { string cssclass = div.className; if (!string.IsNullOrEmpty(cssclass) && ( (cssclass.IndexOf("banner1", StringComparison.InvariantCultureIgnoreCase) >= 0) || (cssclass.IndexOf("banner2", StringComparison.InvariantCultureIgnoreCase) >= 0) || (cssclass.IndexOf("banner3", StringComparison.InvariantCultureIgnoreCase) >= 0) || (cssclass.IndexOf("banner4", StringComparison.InvariantCultureIgnoreCase) >= 0) )) { int n = int.Parse(cssclass.Substring(6)); if (n == selectedBanner) { //counter++; IHTMLElementCollection innerLinks = ((IHTMLElementCollection)div.all).tags("a"); foreach (IHTMLElement bannerLink in innerLinks) { bannerLink.click(); break; } //Scheduler.GetScheduler().Commands.Add(new NotifyCommand("Selected banner")); LogItem logItem = new LogItem(string.Format("Selected banner {0}", selectedBanner)); break; } } } } } }