/// <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); } } }
/// <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); }