public override void scan(int sleepTime = 0)
        {
            DriverWrapper driver = null;

            ScoreBoardFinder sbf = new ScoreBoardFinder(sleepTime);

            sbf.Start();

            while (true)
            {
                try
                {
                    if (driver == null)
                    {
                        driver = driverCreator.CreateDriver("");
                    }

                    var hstats = new Dictionary <string, int>();
                    var astats = new Dictionary <string, int>();

                    var copyOfTheList = sbf.GetWebBlobs();

                    log.Debug("There are " + copyOfTheList.Count() + " games in the blob list");
                    if (copyOfTheList.Count() == 0)
                    {
                        var downTime = 20000;
                        log.Debug("Going to sleep for " + downTime + " miiliseconds");
                        driver.ForceSleep(downTime);
                        continue;
                    }

                    foreach (var blob in copyOfTheList)
                    {
                        log.Debug("On the blob loop...");

                        string homeTeamName = blob.HomeTeam;
                        string awayTeamName = blob.AwayTeam;
                        string league       = blob.League;

                        string scoreUrl = blob.Url;

                        driver.Url = scoreUrl;
                        driver.DirtySleep(sleepTime);

                        string text = driver.GetElementText("//*[@id=\"commentaryContent\"]");

                        int totalDAs = -1;
                        int totalAs  = -1;
                        int totalCs  = -1;
                        int totalBs  = -1;

                        int homeDAs    = -1;
                        int homeAs     = -1;
                        int homeCs     = -1;
                        int homeBs     = -1;
                        int homeSonTs  = -1;
                        int homeSoffTs = -1;

                        int awayDAs    = -1;
                        int awayAs     = -1;
                        int awayCs     = -1;
                        int awayBs     = -1;
                        int awaySonTs  = -1;
                        int awaySoffTs = -1;

                        if (string.IsNullOrEmpty(text) == false)
                        {
                            var splits = text.Split('\n').ToList();

                            splits.RemoveAll(x => String.IsNullOrEmpty(x));
                            splits.RemoveAll(x => x[0] == ' ');
                            splits.RemoveAll(x => char.IsDigit(x[0]));

                            var distinct = splits.Distinct();

                            var query = distinct.Select(g => new { Name = g, Count = g.Count() });

                            splits.ForEach(x => x.Trim());

                            totalDAs = splits.Count(x => x.StartsWith("Dangerous Attack by"));
                            totalAs  = splits.Count(x => x.StartsWith("Attack by"));
                            totalCs  = splits.Count(x => x.StartsWith("Clearance by"));
                            totalBs  = splits.Count(x => x.StartsWith("Blocked Shot for"));

                            homeDAs    = splits.Count(x => x.StartsWith("Dangerous Attack by " + homeTeamName));
                            homeAs     = splits.Count(x => x.StartsWith("Attack by " + homeTeamName));
                            homeCs     = splits.Count(x => x.StartsWith("Clearance by " + homeTeamName));
                            homeBs     = splits.Count(x => x.StartsWith("Blocked Shot for " + homeTeamName));
                            homeSonTs  = splits.Count(x => x.StartsWith("Shot On Target for " + homeTeamName));
                            homeSoffTs = splits.Count(x => x.StartsWith("Shot Off Target for " + homeTeamName));

                            awayDAs    = splits.Count(x => x.StartsWith("Dangerous Attack by " + awayTeamName));
                            awayAs     = splits.Count(x => x.StartsWith("Attack by " + awayTeamName));
                            awayCs     = splits.Count(x => x.StartsWith("Clearance by " + awayTeamName));
                            awayBs     = splits.Count(x => x.StartsWith("Blocked Shot for " + awayTeamName));
                            awaySonTs  = splits.Count(x => x.StartsWith("Shot On Target for " + awayTeamName));
                            awaySoffTs = splits.Count(x => x.StartsWith("Shot Off Target for " + awayTeamName));

                            if (homeDAs + awayDAs != totalDAs)
                            {
                                if (homeDAs == 0)
                                {
                                    homeDAs = totalDAs - awayDAs;
                                }
                                if (awayDAs == 0)
                                {
                                    awayDAs = totalDAs - homeDAs;
                                }
                            }

                            if (homeAs + awayAs != totalAs)
                            {
                                if (homeAs == 0)
                                {
                                    homeAs = totalAs - awayAs;
                                }
                                if (awayAs == 0)
                                {
                                    awayAs = totalAs - homeAs;
                                }
                            }

                            if (homeCs + awayCs != totalCs)
                            {
                                if (homeCs == 0)
                                {
                                    homeCs = totalCs - awayCs;
                                }
                                if (awayCs == 0)
                                {
                                    awayCs = totalCs - homeCs;
                                }
                            }

                            if (homeBs + awayBs != totalBs)
                            {
                                if (homeBs == 0)
                                {
                                    homeBs = totalBs - awayBs;
                                }
                                if (awayBs == 0)
                                {
                                    awayBs = totalBs - homeBs;
                                }
                            }
                        }

                        log.Debug("Game:\t\t" + homeTeamName + " v " + awayTeamName);

                        if (String.IsNullOrEmpty(scoreUrl) == false)
                        {
                            string previewText = driver.GetElementText("//*[@id=\"previewContents\"]");
                            string time        = driver.GetElementText("//*[@id=\"time\"]");
                            string period      = driver.GetElementText("//*[@id=\"period\"]");

                            if (string.IsNullOrEmpty(time))
                            {
                                time = period;
                            }

                            //"Ivory Coast\r\nTogo\r\n56%\r\n44%"
                            //"TotalNormal Time1st Half2nd Half\r\nIvory Coast 2 0 5 5 1 5 18 22 1 0\r\nTogo 1 0 4 9 0 6 16 21 3 0"
                            bool clickedOk = driver.ClickElement("//*[@id=\"statisticsTab\"]");

                            if (!clickedOk)
                            {
                                log.Error("======> Click failed");
                            }

                            var    previewSplits = Regex.Split(previewText, "\r\n").ToList();
                            string aPossession   = previewSplits.Last().Replace("%", "");
                            previewSplits.RemoveAt(previewSplits.Count() - 1);
                            string hPossession = previewSplits.Last().Replace("%", "");

                            string statsText = driver.GetElementText("//*[@id=\"statsTable\"]/tbody");

                            string homeStatsText = Regex.Split(statsText, "\r\n").ToList().ElementAt(0);
                            string awayStatsText = Regex.Split(statsText, "\r\n").ToList().ElementAt(1);

                            var homeStatsList = Regex.Split(homeStatsText, " ").ToList();
                            var justHomeStats = homeStatsList.GetRange(homeStatsList.Count() - 10, 10);

                            var awayStatsList = Regex.Split(awayStatsText, " ").ToList();
                            var justAwayStats = awayStatsList.GetRange(awayStatsList.Count() - 10, 10);

                            hstats[statType[0]] = ParseInt(statType[0], hPossession);

                            for (int i = 0; i != 10; ++i)
                            {
                                int parseResult = ParseInt(statType[i + 1], justHomeStats[i]);
                                if (parseResult == -1 && (i == 0 || i == 5 || i == 8 || i == 9))
                                {
                                    hstats[statType[i + 1]] = 0;
                                }
                                else
                                {
                                    hstats[statType[i + 1]] = parseResult;
                                }
                            }

                            if (hstats[statType[3]] == -1)
                            {
                                hstats[statType[3]] = homeSonTs;
                            }

                            if (hstats[statType[4]] == -1)
                            {
                                hstats[statType[4]] = homeSoffTs;
                            }

                            hstats[statType[11]] = homeAs;
                            hstats[statType[12]] = homeDAs;
                            hstats[statType[13]] = homeBs;
                            hstats[statType[14]] = homeCs;

                            astats[statType[0]] = ParseInt(statType[0], aPossession);

                            for (int i = 0; i != 10; ++i)
                            {
                                int parseResult = ParseInt(statType[i + 1], justAwayStats[i]);
                                if (parseResult == -1 && (i == 0 || i == 5 || i == 8 || i == 9))
                                {
                                    astats[statType[i + 1]] = 0;
                                }
                                else
                                {
                                    astats[statType[i + 1]] = parseResult;
                                }
                            }

                            if (astats[statType[3]] == -1)
                            {
                                astats[statType[3]] = awaySonTs;
                            }

                            if (astats[statType[4]] == -1)
                            {
                                astats[statType[4]] = awaySoffTs;
                            }

                            astats[statType[11]] = awayAs;
                            astats[statType[12]] = awayDAs;
                            astats[statType[13]] = awayBs;
                            astats[statType[14]] = awayCs;

                            homeTeamName = DoSubstitutions(homeTeamName);
                            awayTeamName = DoSubstitutions(awayTeamName);
                            league       = DoSubstitutions(league);

                            bool homeTeamLongest = homeTeamName.Length > awayTeamName.Length;

                            log.Info("League:\t\t" + league + " at " + time);
                            log.Info(homeTeamName.PadRight(homeTeamLongest ? homeTeamName.Length + 1 : awayTeamName.Length + 1) + String.Join(" ", hstats.Values));
                            log.Info(awayTeamName.PadRight(homeTeamLongest ? homeTeamName.Length + 1 : awayTeamName.Length + 1) + String.Join(" ", astats.Values));

                            if (hstats.Keys.Any(x => x == "-1") || astats.Keys.Any(x => x == "-1"))
                            {
                                log.Warn("Bad Stat detected.... skipping");
                                continue;
                            }

                            string today     = DateTime.Now.ToUniversalTime().ToString("ddMMyy");
                            string yesterday = (DateTime.Today.ToUniversalTime() - TimeSpan.FromDays(1)).ToString("ddMMyy");
                            string finalName = Path.Combine(xmlPath, league, homeTeamName + " v " + awayTeamName + "_" + today + ".xml");

                            bool exists = File.Exists(finalName);

                            //edge case of games going over midnight
                            bool bOverMidnight = false;
                            if (exists == false)
                            {
                                string anotherName = Path.Combine(xmlPath, league, homeTeamName + " v " + awayTeamName + "_" + yesterday + ".xml");
                                if (File.Exists(anotherName))
                                {
                                    finalName     = anotherName;
                                    exists        = true;
                                    bOverMidnight = true;
                                }
                            }

                            SendToWebDelegate sd = new SendToWebDelegate(SendToWeb);
                            sd.BeginInvoke(league, bOverMidnight ? DateTime.Today.ToUniversalTime() - TimeSpan.FromDays(1) : DateTime.Now.ToUniversalTime(), homeTeamName, awayTeamName, hstats, astats, time, null, null);

                            WriteXmlDelegate wd = new WriteXmlDelegate(WriteXml);
                            wd.BeginInvoke(xmlPath, hstats, astats, homeTeamName, awayTeamName, league, time, exists, finalName, null, null);
                        }
                    }
                }
                catch (Exception ce)
                {
                    log.Error("Exception caught: " + ce);
                    if (driver != null)
                    {
                        driver.Quit();
                        driver.Dispose();
                        driver = null;
                    }
                }
            }
        }
예제 #2
0
        public override void scan(int sleepTime)
        {
            DriverWrapper driverWrapper = null;

            int idx = -1;

            if (driverWrapper == null)
            {
                string agentString = "--user-agent=\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; Nexus S Build/GRK39F) AppleWebKit/533/1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\"";
                driverWrapper = DriverFactory.getDriverWaiter(BrowserAutomation.DriverFactory.Browser.Chrome, agentString);
            }

            int    badLoopCounter = 0;
            string botID          = System.Guid.NewGuid().ToString();

            while (true)
            {
                idx++;
                try
                {
                    if (driverWrapper == null)
                    {
                        string agentString = "--user-agent=\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; Nexus S Build/GRK39F) AppleWebKit/533/1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\"";

                        driverWrapper = driverCreator.CreateDriver(agentString);

                        if (driverWrapper == null)
                        {
                            log.Error("Failed to make a Selenium Driver");
                            continue;
                        }
                    }

                    //load the main page
                    driverWrapper.Url = "https://mobile.bet365.com/premium/#type=InPlay;key=1;ip=1;lng=1";
                    //driverWrapper.Url = "https://mobile.bet365.com/premium/#type=Splash;key=1;ip=0;lng=1";
                    bool inPlayElement = false;

                    try
                    {
                        inPlayElement = driverWrapper.WaitUntil(ExpectedBotCondition.VerifyInplayScreen(), 60);
                    }
                    catch (WebDriverTimeoutException)
                    {
                        log.Debug("No games in play, going to sleep for a bit....");
                        driverWrapper.Quit();
                        driverWrapper.Dispose();
                        driverWrapper = null;
                        continue;
                    }

                    List <IWebElement> fixtureElements = null;

                    if (inPlayElement)
                    {
                        fixtureElements = driverWrapper.FindElements(By.ClassName("Fixture")).ToList();
                        int removed = fixtureElements.RemoveAll(x => x.GetAttribute("class") != "Fixture");

                        log.Warn("Fixtures: " + fixtureElements.Count);
                        log.Warn("Removed: " + removed);

                        var fixtureList = driverWrapper.FindElement(By.ClassName("FixtureList"));
                        var fText       = fixtureList.Text;

                        var fixtureSplits = Regex.Split(fText, "\r\n").ToList();

                        fixtureSplits.RemoveAll(x => excludeString.Contains(x.ToUpper()));

                        var competitionName = "";
                        competitions.Clear();

                        while (fixtureSplits.Count() != 0)
                        {
                            var tempBuf = new List <string>();

                            fixtureSplits.RemoveAll(x => x == "VIDEO");

                            Game a = null;

                            while (fixtureSplits.Count() != 0)
                            {
                                if (fixtureSplits.First().StartsWith("  "))
                                {
                                    tempBuf.Add(Chomp(fixtureSplits));
                                    break;
                                }
                                else
                                {
                                    tempBuf.Add(Chomp(fixtureSplits));
                                }
                            }

                            if (tempBuf.Count() == 2)
                            {
                                var team1 = tempBuf[0];
                                var team2 = tempBuf[1];

                                if (team1.Contains(":"))
                                {
                                    team1 = team1.Substring(team1.IndexOf(' '));
                                }

                                a = new Game();
                                a.competitionName = competitionName.Trim();
                                a.team1           = team1.Trim();
                                a.team2           = team2.Trim();
                            }
                            else if (tempBuf.Count() == 3)
                            {
                                competitionName = tempBuf[0];
                                var team1 = tempBuf[1];
                                var team2 = tempBuf[2];

                                if (team1.Contains(":"))
                                {
                                    team1 = team1.Substring(team1.IndexOf(' '));
                                }

                                a = new Game();
                                a.competitionName = competitionName.Trim();
                                a.team1           = team1.Trim();
                                a.team2           = team2.Trim();
                            }
                            else
                            {
                                log.Info("Unexpected number of string in temp buf");
                            }

                            if (a != null)
                            {
                                competitions.Add(a);
                            }
                        }
                    }
                    else
                    {
                        continue;
                    }

                    if (idx == -1)
                    {
                        Random random = new Random();
                        idx = random.Next(0, fixtureElements.Count());
                    }

                    int elementCount = 0;

                    fixtureElements.ForEach(x =>
                    {
                        if (idx == elementCount)
                        {
                            log.Warn(x.Text);
                        }
                        else
                        {
                        }
                        // log.Debug(x.Text);
                        ++elementCount;
                    });

                    log.Info("Scanning game " + idx + " of " + fixtureElements.Count() + " games in play at " + DateTime.Now.ToUniversalTime());

                    if (idx < fixtureElements.Count())
                    {
                        var hstats = new Dictionary <string, int>();
                        var astats = new Dictionary <string, int>();

                        int attempts = 3;

                        fixtureElements.ElementAt(idx).Click();

                        string clockText = "";

                        try
                        {
                            bool clockIsOnScreen = driverWrapper.WaitUntil(ExpectedBotCondition.ThereIsAClock(), 20);

                            if (clockIsOnScreen)
                            {
                                var clock = driverWrapper.FindElement(By.Id("mlClock"));
                                if (clock.Text.Contains(':'))
                                {
                                    clockText = clock.Text;
                                }
                            }

                            if (String.IsNullOrEmpty(clockText))
                            {
                                log.Error("No time avaiable!!!!");
                                throw new Exception();
                            }
                        }
                        catch (Exception vr)
                        {
                            log.Warn("cleanScores == null -  " + vr);

                            ++badLoopCounter;

                            if (badLoopCounter == 5)
                            {
                                log.Warn("Bad loop counter reset...");

                                badLoopCounter = 0;
                                driverWrapper.Quit();
                                driverWrapper.Dispose();
                                driverWrapper = null;
                            }

                            continue;
                        }

                        try
                        {
                            driverWrapper.WaitUntil(ExpectedBotCondition.ThereIsAnIdWithAttributeWithValue("arena", "style", "height: 144px;"), 5);
                        }
                        catch
                        {
                            log.Warn("Couldn't find stats areas, continuing....");
                            continue;
                        }

                        System.Threading.Thread.Sleep(400);

                        IJavaScriptExecutor js = driverWrapper.Driver as IJavaScriptExecutor;
                        js.ExecuteScript("document.getElementsByClassName('carousel')[0].setAttribute('style', '-webkit-transform: translate(-50%, 0px);')");

                        System.Threading.Thread.Sleep(400);

                        string hCardsAndCornersText = "";
                        string aCardsAndCornersText = "";

                        Func <IWebDriver, bool> f1 = driver =>
                        {
                            ReadOnlyCollection <IWebElement> elems = null;

                            try
                            {
                                elems = driver.FindElements(By.Id("team1IconStats"));
                            }
                            catch { }

                            if (elems.Count != 0)
                            {
                                hCardsAndCornersText = elems.First().Text;
                            }
                            return(hCardsAndCornersText.Split(' ').Count() == 3);
                        };

                        Func <IWebDriver, bool> f2 = driver =>
                        {
                            ReadOnlyCollection <IWebElement> elems = null;

                            try
                            {
                                elems = driver.FindElements(By.Id("team2IconStats"));
                            }
                            catch { }

                            if (elems.Count != 0)
                            {
                                aCardsAndCornersText = elems.First().Text;
                            }
                            return(aCardsAndCornersText.Split(' ').Count() == 3);
                        };

                        try
                        {
                            driverWrapper.WaitUntilConditionIsTrue(f1, 2);
                            driverWrapper.WaitUntilConditionIsTrue(f2, 2);
                        }
                        catch
                        {
                            try
                            {
                                js.ExecuteScript("document.getElementsByClassName('carousel')[0].setAttribute('style', '-webkit-transform: translate(-50%, 0px);')");
                                driverWrapper.WaitUntilConditionIsTrue(f1, 3);
                                driverWrapper.WaitUntilConditionIsTrue(f2, 3);
                            }
                            catch { }
                        }

                        if (hCardsAndCornersText == "" ||
                            aCardsAndCornersText == "")
                        {
                            log.Warn("hCardsAndCorners == null");
                            log.Warn("Resetting driver...");

                            ++badLoopCounter;

                            if (badLoopCounter == 5)
                            {
                                badLoopCounter = 0;
                                driverWrapper.Quit();
                                driverWrapper.Dispose();
                                driverWrapper = null;
                            }

                            continue;
                        }

                        var inPlayTitles = driverWrapper.GetValuesByClassName("EventViewTitle", attempts, 1, new char[] { '@' });
                        if (inPlayTitles == null)
                        {
                            log.Warn("inPlayTitles == null"); continue;
                        }

                        bool rballOkay = true;

                        List <string> shotsOnTarget    = null;
                        List <string> shotsOffTarget   = null;
                        List <string> attacks          = null;
                        List <string> dangerousAttacks = null;

                        shotsOnTarget = driverWrapper.GetValuesById("stat1", attempts, 3, "\r\n");

                        if (shotsOnTarget == null)
                        {
                            IWebElement noStats = driverWrapper.FindElement(By.Id("noStats"));
                            if (noStats != null)
                            {
                                log.Debug("shotsOnTarget == null Message: " + noStats.Text);
                            }
                            else
                            {
                                log.Warn("shotsOnTarget == null Expected no statistics but it's not displayed for some other reason");
                            }

                            rballOkay = false;
                        }

                        if (rballOkay == true)
                        {
                            shotsOffTarget = driverWrapper.GetValuesById("stat2", attempts, 3, "\r\n");
                            if (shotsOffTarget == null)
                            {
                                log.Warn("shotsOffTarget == null"); rballOkay = false;
                            }

                            attacks = driverWrapper.GetValuesById("stat3", attempts, 3, "\r\n");
                            if (attacks == null)
                            {
                                log.Warn("attacks == null"); rballOkay = false;
                            }

                            dangerousAttacks = driverWrapper.GetValuesById("stat4", attempts, 3, "\r\n");
                            if (dangerousAttacks == null)
                            {
                                log.Warn("dangerousAttacks == null"); rballOkay = false;
                            }
                        }

                        string inPlayTitle = inPlayTitles.ElementAt(0);

                        if (inPlayTitle.Contains("\r\n"))
                        {
                            inPlayTitle = inPlayTitle.Substring(0, inPlayTitle.IndexOf("\r\n"));
                        }

                        var vals = new List <string>();

                        Action <Dictionary <string, int>, StatAlias, string, int> setStat =
                            (Dictionary <string, int> d, StatAlias alias, string val, int at) =>
                        {
                            string statString = stat(alias);
                            d[statString] = ParseInt(statString, val);
                        };

                        Action <Dictionary <string, int>, StatAlias[], List <string> > setStat2 =
                            (Dictionary <string, int> d, StatAlias[] alias, List <string> list) =>
                        {
                            for (int i = 0; i < alias.Length; ++i)
                            {
                                string statString = stat(alias[i]);
                                d[statString] = ParseInt(statString, list.ElementAt(i));
                            }
                        };

                        StatAlias[] aliases = { StatAlias.RedCards, StatAlias.YellowCards, StatAlias.Corners };

                        setStat2(hstats, aliases, hCardsAndCornersText.Split(' ').ToList());
                        setStat2(astats, aliases, aCardsAndCornersText.Split(' ').ToList());

                        if (rballOkay)
                        {
                            aliases = new StatAlias[] { StatAlias.ShotsOnTarget, StatAlias.ShotsOffTarget, StatAlias.Attacks, StatAlias.DangerousAttacks };

                            Func <List <string>, string> h = x => x.ElementAt(0);

                            setStat2(hstats, aliases, new List <string> {
                                h(shotsOnTarget), h(shotsOffTarget), h(attacks), h(dangerousAttacks)
                            });

                            Func <List <string>, string> a = x => x.ElementAt(2);

                            setStat2(astats, aliases,
                                     new List <string> {
                                a(shotsOnTarget), a(shotsOffTarget), a(attacks), a(dangerousAttacks)
                            });
                        }

                        var team1score = driverWrapper.FindElement(By.Id("team1score")).Text;
                        var team2score = driverWrapper.FindElement(By.Id("team2score")).Text;
                        setStat(hstats, StatAlias.Goals, team1score, 0);
                        setStat(astats, StatAlias.Goals, team2score, 1);

                        var teams = Regex.Split(inPlayTitle, " v ");

                        string homeTeamName = DoSubstitutions(teams.ElementAt(0));
                        string awayTeamName = DoSubstitutions(teams.ElementAt(1));

                        string today = DateTime.Now.ToUniversalTime().ToString("ddMMyy");

                        Game maybeGame = null;

                        try
                        {
                            maybeGame = competitions.SingleOrDefault(x => x.team1.ToUpper().StartsWith(homeTeamName.ToUpper()) && x.team2.ToUpper().StartsWith(awayTeamName.ToUpper()));
                        }
                        catch (Exception ce)
                        {
                            log.Warn("Exception thrown in your shit code!:" + ce);
                        }

                        string league = "All";

                        if (maybeGame != null)
                        {
                            league = DoSubstitutions(maybeGame.competitionName);
                        }

                        string yesterday = (DateTime.Today.ToUniversalTime() - TimeSpan.FromDays(1)).ToString("ddMMyy");

                        string finalName = "";

                        try
                        {
                            finalName = Path.Combine(xmlPath, league, homeTeamName + " v " + awayTeamName + "_" + today + ".xml");
                        }
                        catch (Exception ce)
                        {
                            log.Warn("Another exception thrown in your shit code!:" + ce);
                            throw ce;
                        }

                        bool exists = File.Exists(finalName);

                        //edge case of games going over midnight
                        bool bOverMidnight = false;

                        if (exists == false)
                        {
                            string anotherName = Path.Combine(xmlPath, league, homeTeamName + " v " + awayTeamName + "_" + yesterday + ".xml");
                            if (File.Exists(anotherName))
                            {
                                finalName     = anotherName;
                                exists        = true;
                                bOverMidnight = true;
                            }
                        }

                        SendToWebDelegate sd = new SendToWebDelegate(SendToWeb);
                        sd.BeginInvoke(league, bOverMidnight ? DateTime.Today.ToUniversalTime() - TimeSpan.FromDays(1) : DateTime.Now.ToUniversalTime(), homeTeamName, awayTeamName, hstats, astats, clockText, null, null);
                        //SendToWeb(league, bOverMidnight ? DateTime.Today - TimeSpan.FromDays(1) : DateTime.Now, homeTeamName, awayTeamName, hstats, astats, clockText);

                        WriteXmlDelegate wd = new WriteXmlDelegate(WriteXml);
                        wd.BeginInvoke(xmlPath, hstats, astats, homeTeamName, awayTeamName, league, clockText, exists, finalName, null, null);
                    }
                    else
                    {
                        idx = -1;
                    }
                }
                catch (System.Net.WebException we)
                {
                    log.Warn("Caught Web Exception: " + we);
                    continue;
                }
                catch (OpenQA.Selenium.WebDriverException we)
                {
                    log.Error("Exception thrown: " + we);
                    if (driverWrapper != null)
                    {
                        driverWrapper.Quit();
                        driverWrapper.Dispose();
                        driverWrapper = null;
                    }
                }
                catch (Exception we)
                {
                    log.Error("Exception thrown: " + we);
                    if (driverWrapper != null)
                    {
                        driverWrapper.Quit();
                        driverWrapper.Dispose();
                        driverWrapper = null;
                    }
                }
            }
        }