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