GetService() 공개 추상적인 메소드

获取服务,目前应用在获取Gecko浏览器实例
public abstract GetService ( Type serviceType ) : object
serviceType System.Type
리턴 object
예제 #1
0
        public override PhaseResult Run(Context context)
        {
            GeckoWebBrowser browser = (GeckoWebBrowser)context.GetService(typeof(GeckoWebBrowser));
            Debug.Assert(browser != null, "browser is null");

            String regex = context.Resolve(RegularExpression);
            Debug.Assert(String.IsNullOrWhiteSpace(regex), "regular expression is null!");

            String url = browser.Document.Uri;
            Match match = Regex.Match(url, regex);

            PhaseResult pr = new PhaseResult(this);

            if (match.Success)
            {
                // 表达式中所有的Group的id名
                List<String> ids = RegexHelper.ParseGroupIndexNames(regex);

                // 按照Group的名字写入到ParameterProvider
                foreach (String id in ids)
                {
                    context.ParameterProvider.SetString(id, match.Groups[id].Value);
                }

                pr.Succeed = true;
                pr.SetInt(Constant.RVCount, ids.Count);
            }
            else
            {
                pr.Succeed = false;
            }

            return pr;
        }
예제 #2
0
        public override PhaseResult Run(Context context)
        {
            GeckoWebBrowser browser = (GeckoWebBrowser)context.GetService(typeof(GeckoWebBrowser));
            Debug.Assert(browser != null, "browser is null");

            Locator.Locator = context.Resolve(Locator.Locator);
            Boolean succ = RequestHelper.OperateBrowserClick(browser, Locator);

            PhaseResult pr = new PhaseResult(this);
            pr.Succeed = succ;
            context.LastRequestContent = RequestHelper.GetGeckoContent(browser) ?? String.Empty;

            return pr;
        }
예제 #3
0
        public override PhaseResult Run(Context context)
        {
            PhaseResult pr = new PhaseResult(this);

            GeckoWebBrowser browser = (GeckoWebBrowser)context.GetService(typeof(GeckoWebBrowser));
            Debug.Assert(browser != null, "browser is null");

            if (WaitMilliseconds > 0)
            {
                // 等待一定的毫秒数
                Thread.Sleep(WaitMilliseconds);
            }
            else
            {
                String urlRegex = context.Resolve(UrlRegex);
                String contentRegex = context.Resolve(ContentRegex);
                
                // TODO::加上Timeout!!!返回结果只有为Timeout的时候才算失败
                // 先等待Url的Pattern
                if (!String.IsNullOrWhiteSpace(urlRegex))
                {
                    while (browser.Document.Uri == null || !Regex.IsMatch(browser.Document.Uri, urlRegex))
                    {
                        Thread.Sleep(200);
                    }
                }

                // 再等待Content的Pattern
                if (!String.IsNullOrWhiteSpace(contentRegex))
                {
                    while (!Regex.IsMatch(RequestHelper.GetGeckoContent(browser), contentRegex))
                    {
                        Thread.Sleep(200);
                    }
                }
            }

            string content = RequestHelper.GetGeckoContent(browser);
            context.LastRequestContent = content ?? String.Empty;
            pr.SetString(Constant.RVHttpRequestResult, content);
            pr.Succeed = true;
            return pr;
        }
예제 #4
0
        public PhaseResult RunAsNestedList(Context context)
        {
            PhaseResult list = MetaList.Run(context);
            PhaseResult pr = new PhaseResult(this);
            List<String> jsonResult = new List<string>();

            if (list.ListResult != null)
            {
                GeckoWebBrowser browser = (GeckoWebBrowser)context.GetService(typeof(GeckoWebBrowser));
                foreach (String item in list.ListResult)
                {
                    Dictionary<String, String> itemDict = JsonConvert.DeserializeObject<Dictionary<String, String>>(item);
                    if (itemDict.ContainsKey(MetaListUrlKey))
                    {
                        String url = itemDict[MetaListUrlKey];
                        if (!url.StartsWith("http"))
                        {
                            url = String.Format("{0}/{1}", "http://club.autohome.com.cn", url.TrimStart('/'));
                        }
                        String content = String.Empty;
                        if (browser != null)
                        {
                            content = RequestHelper.BrowserGet(browser, url);
                        }
                        else
                        {
                            content = RequestHelper.Get(url);
                        }
                        context.LastRequestContent = content;
                        PhaseResult parseResult = Parse.Run(context);
                        context.PushResult(parseResult);
                        jsonResult.AddRange(parseResult.ListResult ?? new List<String>());
                    }
                }
            }

            pr.ListResult = jsonResult;
            pr.Succeed = true;
            return pr;
        }