public static (SouqProductBucket bucket, IDictionary <string, SouqToken> tokens) GetProductResultsHtml(string productFullId)
        {
retry:
            SyncSouqCookies();

            var url = $"https://egypt.souq.com/eg-en/{productFullId}/i/";

            HtmlDocument document;

            try
            {
                document = WebScrapper.GetDownloadHtml(url);
            }
            catch (HtmlScapperException ex)
            {
                goto retry;
            }

            #region Bucket

            var globalBucketNode = document.DocumentNode.Descendants().First(l => l.Name == "script" && l.InnerHtml.Contains("globalBucket"));
            var globalBucketData =
                globalBucketNode.InnerText.Replace("var globalBucket =", "").TrimStart().TrimEnd();

            var bucketObj = JsonConvert.DeserializeObject <SouqProductBucket>(globalBucketData);

            #endregion

            #region Token

            Dictionary <string, SouqToken> tmpResult = new Dictionary <string, SouqToken>();

            var formIds = new[]
            {
                "searchForm",
                "addItemToCart",
                "reviews-list-id"
            };

            int index       = 0;
            var formResults = new SouqToken[3];

            foreach (var formId in formIds)
            {
                var filter_hitNodeExist = document.DocumentNode.Descendants()
                                          .AnyByNameNAttribute("form", "id", formId);

                if (filter_hitNodeExist)
                {
                    var filter_hitsNode = document.DocumentNode.Descendants()
                                          .SingleByNameNAttribute("form", "id", formId);
                    var filter_hitsCfs = filter_hitsNode.Descendants()
                                         .SingleByNameNAttribute("input", "name", "hitsCfs");
                    var filter_hitsCfsMeta = filter_hitsNode.Descendants()
                                             .SingleByNameNAttribute("input", "name", "hitsCfsMeta");

                    formResults[index] = new SouqToken()
                    {
                        hitsCfs     = filter_hitsCfs.Attributes["value"].Value,
                        hitsCfsMeta = filter_hitsCfsMeta.Attributes["value"].Value
                    };
                }
                else
                {
                    formResults[index] = null;
                }

                index++;
            }

            for (int i = 0; i < formIds.Length; i++)
            {
                tmpResult.Add(formIds[i], formResults[i]);
            }

            #endregion

            return(bucketObj, tmpResult);
        }
        public static IDictionary <string, SouqToken> GetProductAccessTokens(string productFullId)
        {
retry:

            SyncSouqCookies();
            var url = $"https://egypt.souq.com/eg-en/{productFullId}/i/";

            try
            {
                Dictionary <string, SouqToken> tmpResult = new Dictionary <string, SouqToken>();

                var document = WebScrapper.GetDownloadHtml(url, cookies: Cookies);

                var formIds = new[]
                {
                    "searchForm",
                    "addItemToCart",
                    "reviews-list-id"
                };

                int index       = 0;
                var formResults = new SouqToken[3];

                foreach (var formId in formIds)
                {
                    var filter_hitNodeExist = document.DocumentNode.Descendants()
                                              .AnyByNameNAttribute("form", "id", formId);

                    if (filter_hitNodeExist)
                    {
                        var filter_hitsNode = document.DocumentNode.Descendants()
                                              .SingleByNameNAttribute("form", "id", formId);
                        var filter_hitsCfs = filter_hitsNode.Descendants()
                                             .SingleByNameNAttribute("input", "name", "hitsCfs");
                        var filter_hitsCfsMeta = filter_hitsNode.Descendants()
                                                 .SingleByNameNAttribute("input", "name", "hitsCfsMeta");

                        formResults[index] = new SouqToken()
                        {
                            hitsCfs     = filter_hitsCfs.Attributes["value"].Value,
                            hitsCfsMeta = filter_hitsCfsMeta.Attributes["value"].Value
                        };
                    }
                    else
                    {
                        formResults[index] = null;
                    }

                    index++;
                }

                for (int i = 0; i < formIds.Length; i++)
                {
                    tmpResult.Add(formIds[i], formResults[i]);
                }

                return(tmpResult);
            }
            catch (HtmlScapperException ex)
            {
                goto retry;
            }
        }