コード例 #1
0
        /// <summary>
        /// 发送客户端搜集的平台的cookies 集合到远程
        /// </summary>
        public static void SendCookiesToRemote()
        {
            string msg = "SendCookiesToRemote 被执行!时间:" + DateTime.Now.ToString();

            Logger.Info(msg);

            lock (_locker)
            {
                SendMessageToListerner(msg);

                //todo:实现拉取cookies 然后发送到远程server
                var allPlatforms = Enum.GetValues(typeof(SupportPlatformEnum)); // SupportPlatformEnum.Alimama.get
                                                                                //var cookieLoader = new LazyCookieVistor();
                foreach (SupportPlatformEnum platform in allPlatforms)
                {
                    var siteObj = GlobalContext.SupportPlatforms.Find(x => x.Platform == platform);
                    if (null == siteObj)
                    {
                        string platformDescription = platform.GetEnumDescription();
                        string errMsg = string.Format($"CrawlerCookiesPopJob,未能正确从配置文件加载平台地址:{platformDescription ?? platform.ToString()}");
                        SendMessageToListerner(errMsg);
                        continue;
                    }
                    var domian = siteObj.SiteUrl;
                    var cks    = new LazyCookieVistor().LoadNativCookies(domian, true);


                    if (null != cks && cks.IsNotEmpty())
                    {
                        //淘宝的cookie 附加
                        if (platform == SupportPlatformEnum.Taobao)
                        {
                            //推送爱淘宝-券官网的cookie到淘宝
                            var cks_aiTaoBao = new LazyCookieVistor().LoadNativCookies(GlobalContext.AiTaobaoSiteURL, true);
                            if (null != cks_aiTaoBao && cks_aiTaoBao.IsNotEmpty())
                            {
                                for (int i = 0; i < cks_aiTaoBao.Count; i++)
                                {
                                    var item = cks_aiTaoBao.ElementAt(i);
                                    if (cks.FirstOrDefault(x => x.Name == item.Name) != null)
                                    {
                                        continue;//跳过重名的cookie
                                    }
                                    cks.Add(item);
                                }
                            }
                        }
                        GlobalContext.PushToRedisCookies(domian, cks);
                    }
                }

                //推送轻淘客cookies
                var cks_qingTaoke = new LazyCookieVistor().LoadNativCookies(GlobalContext.QingTaokeSiteURL, true);
                if (null != cks_qingTaoke && cks_qingTaoke.IsNotEmpty())
                {
                    GlobalContext.PushToRedisCookies(GlobalContext.QingTaokeSiteURL, cks_qingTaoke);
                }
            }
        }
コード例 #2
0
        /// <summary>
        /// 从其对应的render 进程中接收过来的消息过滤处理
        /// </summary>
        /// <param name="browser"></param>
        /// <param name="sourceProcess"></param>
        /// <param name="message"></param>
        /// <returns></returns>
        protected override bool OnProcessMessageReceived(CefBrowser browser, CefProcessId sourceProcess, CefProcessMessage message)
        {
            Console.WriteLine("Render::OnProcessMessageReceived: SourceProcess={0}", sourceProcess);
            Console.WriteLine("Message Name={0} IsValid={1} IsReadOnly={2}", message.Name, message.IsValid, message.IsReadOnly);
            var arguments = message.Arguments;

            for (var i = 0; i < arguments.Count; i++)
            {
                var    type = arguments.GetValueType(i);
                object value;
                switch (type)
                {
                case CefValueType.Null: value = null; break;

                case CefValueType.String: value = arguments.GetString(i); break;

                case CefValueType.Int: value = arguments.GetInt(i); break;

                case CefValueType.Double: value = arguments.GetDouble(i); break;

                case CefValueType.Bool: value = arguments.GetBool(i); break;

                default: value = null; break;
                }

                Console.WriteLine("  [{0}] ({1}) = {2}", i, type, value);
            }
            //filters
            if (message.Name.Equals(IPCCommand.CommandType.GET_COOKIE_FROM_BROWSER_PROCESS.ToString()))
            {
                var    argumentsInMsg = message.Arguments;
                string domainName     = argumentsInMsg.GetString(0);
                if (!string.IsNullOrEmpty(domainName))
                {
                    //获取指定域名的cookie
                    var cks = new LazyCookieVistor().LoadNativCookies(domainName);
                    if (cks.IsNotEmpty())
                    {
                        var cookieString    = cks.ToJson();
                        var message_cookies = CefProcessMessage.Create(IPCCommand.CommandType.GET_COOKIE_FROM_BROWSER_PROCESS.ToString());
                        message_cookies.Arguments.SetString(0, domainName);
                        message_cookies.Arguments.SetString(1, cookieString);
                        var success = browser.SendProcessMessage(CefProcessId.Renderer, message_cookies);
                        Console.WriteLine("Sending myMessage3 to browser process = {0}", success);
                    }
                }
            }
            return(true);
            //return base.OnProcessMessageReceived(browser, sourceProcess, message);
        }