예제 #1
0
        public override async Task ProcessAsync(ICrawler crawler, PropertyBag propertyBag)
        {
            AspectF.Define.
            NotNull(crawler, "crawler").
            NotNull(propertyBag, "propertyBag");

            if (propertyBag.StatusCode != HttpStatusCode.OK)
            {
                return;
            }

            if (!IsHtmlContent(propertyBag.ContentType))
            {
                return;
            }

            var documentDomHtml = string.Empty;
            var tempThread      = new Thread(o =>
            {
                using (var internetExplorer = new TridentBrowserForm(propertyBag.ResponseUri.ToString()))
                {
                    Application.Run(internetExplorer);
                    documentDomHtml = internetExplorer.DocumentDomHtml;
                }
            });

            tempThread.SetApartmentState(ApartmentState.STA);
            tempThread.Start();
            tempThread.Join();

            propertyBag.GetResponse = () => new MemoryStream(Encoding.UTF8.GetBytes(documentDomHtml));
            await base.ProcessAsync(crawler, propertyBag).ConfigureAwait(false);
        }
		public override void Process(Crawler crawler, PropertyBag propertyBag)
		{
			AspectF.Define.
				NotNull(crawler, "crawler").
				NotNull(propertyBag, "propertyBag");

			if (propertyBag.StatusCode != HttpStatusCode.OK)
			{
				return;
			}

			if (!IsHtmlContent(propertyBag.ContentType))
			{
				return;
			}

			string documentDomHtml = string.Empty;
			Thread tempThread = new Thread(o =>
				{
					using (TridentBrowserForm internetExplorer = new TridentBrowserForm(propertyBag.ResponseUri.ToString()))
					{
						Application.Run(internetExplorer);
						documentDomHtml = internetExplorer.DocumentDomHtml;
					}
				});
			tempThread.SetApartmentState(ApartmentState.STA);
			tempThread.Start();
			tempThread.Join();

			propertyBag.GetResponse = () => new MemoryStream(Encoding.UTF8.GetBytes(documentDomHtml));
			base.Process(crawler, propertyBag);
		}