using System.Threading; using System.Windows.Forms; namespace GetAfterAJAXPage { public class WebBrowserCrawler { // WebBrowser private WebBrowser _WebBrowder; //最后结果 private string _Result { get; set; } //网址 private string _Path { get; set; } /// <summary> /// 对外公开的Method /// </summary> www.it165.net /// <param name="url">URL Path</param> /// <returns></returns> public string GetReult(string url) { _Path = url; var mThread = new Thread(FatchDataToResult); //Apartment 是处理序当中让物件共享相同执行绪存取需求的逻辑容器。 同一 Apartment 内的所有物件都能收到 Apartment 内任何执行绪所发出的呼叫。 //.NET Framework 并不使用 Apartment;Managed 物件必须自行以安全执行绪 (Thread-Safe) 的方式运用一切共享资源。 //因为 COM 类别使用 Apartment,所以 Common Language Runtime 在 COM Interop 的状况下呼叫出 COM 物件时必须建立 Apartment 并且加以初始化。 //Managed 执行绪可以建立并且输入只容许一个执行绪的单一执行绪 Apartment (STA),或者含有一个以上执行绪的多执行绪 Apartment (MTA)。 //只要把执行绪的 ApartmentState 属性设定为其中一个 ApartmentState 列举型别 (Enumeration),即可控制所建立的 Apartment 属于哪种型别。 //因为特定执行绪一次只能初始化一个 COM Apartment,所以第一次呼叫 Unmanaged 程式码之后就无法再变更 Apartment 型别。 //From : http://msdn.microsoft.com/zh-tw/library/system.threading.apartmentstate.aspx mThread.SetApartmentState(ApartmentState.STA); mThread.Start(); mThread.Join(); return _Result; } /// <summary> /// Call _WebBrowder 抓取资料 /// For thread Call /// </summary> private void FatchDataToResult() { _WebBrowder = new WebBrowser(); _WebBrowder.DocumentCompleted += _WebBrowder_DocumentCompleted; _WebBrowder.Navigate(_Path); //处理目前在讯息伫列中的所有 Windows 讯息。 //如果在程式码中呼叫 DoEvents,您的应用程式就可以处理其他事件。例如,如果您的表单将资料加入 ListBox 并将 DoEvents 加入程式码中,则当另一个视窗拖到您的表单上时,该表单将重新绘製。 //如果您从程式码移除 DoEvents,您的表单将不会重新绘製,直到按钮按一下的事件处理常式执行完毕。 while (_WebBrowder.ReadyState != WebBrowserReadyState.Complete) { Application.DoEvents(); } _WebBrowder.Dispose(); } //结束后回填 void _WebBrowder_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) { _Result = (sender as WebBrowser).Document.Body.InnerHtml; } } }
WebBrowserCrawler webBrowserCrawler=new WebBrowserCrawler(); File.WriteAllText(Server.MapPath("sample.txt"),webBrowserCrawler.GetReult(http://www.in2.cc/sample/waterfalllab.htm));
原文地址:http://www.it165.net/pro/html/201208/3614.html
相关推荐
其次,获取网页内容通常是通过HTTP GET请求实现的,这可能涉及到解析HTML、提取特定信息或使用WebBrowser控件展示整个页面。在Delphi中,可以使用Indy的TIdHTTP组件或WinINet API来发送HTTP请求,并获取响应的HTML...
5. **线程安全与异步操作**:在多用户或高性能环境中,打印操作可能需要考虑线程安全性和异步处理,以避免阻塞UI线程。 6. **调试与日志**:`license.rtf`文件可能包含了该库的许可协议信息,这在使用开源库时尤其...
总结来说,.NET内容采集源码涵盖了网络请求、HTML解析、数据处理、多线程、异步编程、数据库操作以及异常和日志管理等多个方面。理解并熟练运用这些知识点,可以构建出高效、稳定的网络爬虫系统。在实际开发中,还...
7. **多线程或并行处理**:为了提高效率,可能采用多线程或异步并行下载图片,比如使用Task Parallel Library (TPL)。 综上所述,“PictureDownload”项目涵盖了C#编程、HTTP通信、HTML解析、文件操作等多个方面,...
7. **网页解析**: 虽然JEditorPane能处理基本的HTML,但复杂的网页可能需要更强大的解析器,如Jsoup,它可以解析DOM树,提取或修改网页内容。 8. **安全性**: 对于一个真正的Web浏览器,需要考虑安全问题,例如处理...
多线程可以提高用户体验,如使用异步加载和更新;而安全通信则需要遵循HTTPS的最佳实践,保护用户的隐私。 总的来说,"基于C++的Web浏览器"项目是一个综合性的学习和实践过程,涉及到了C++语言基础、网络编程、...
或者使用多线程,提高并行处理能力。 在提供的压缩包文件"网页元素获取"中,可能包含了实现上述功能的源代码示例,你可以通过阅读和分析代码来学习如何在C++ Builder中进行实际操作。这些实例代码会演示如何组合...
此外,浏览器可能还需要考虑一些实际应用中的问题,如错误处理(异常捕获和处理)、多线程(用于并发请求)、缓存策略(提高加载速度)、用户界面设计(用户体验)等。在C#中,可以利用Task并行库来实现异步操作,...
4. 并行处理:多线程或异步编程技术,提高批量查询的效率。 5. 文件操作:读取和写入文本文件,如CSV,用于存储网站列表和查询结果。 6. 用户界面设计:使用WinForms或WPF创建友好直观的用户界面。 通过学习和理解...
8. **多线程**: 为了保证用户界面的响应性,网络浏览器通常在后台线程上执行网络请求。C#中的Task和async/await关键字可以帮助实现异步操作。 9. **用户交互**: 使用事件驱动编程来响应用户的操作,如按钮点击...
响应内容可能需要进一步解析,如提取HTML、CSS和脚本。 - **HTML解析**:使用HTML解析库(如AngleSharp)解析获取的HTML内容,生成DOM树。 - **页面渲染**:将DOM树转换为可视化的UI。如果使用WebBrowser控件,...
开发者可以使用这些框架创建浏览器的地址栏、前进/后退按钮、刷新按钮等控件,并将解析后的HTML内容显示在一个WebBrowser控件中。 4. **WebBrowser控件**:这是.NET框架提供的一种内置控件,可以直接在C#程序中嵌入...
12. **多线程处理**:网络操作往往涉及异步处理,VB支持多线程编程,可以使用Thread或Task类创建并管理新的执行线程,避免阻塞UI。 以上只是VB网络与Internet编程的部分内容,实际学习中还会涉及更多细节,如错误...
7. **HTML交互**:通过WebBrowser控件,可以使用`Document`属性访问HTML文档的DOM(文档对象模型),进行页面元素的操作或数据提取。 8. **异步编程**:考虑到网页加载可能会阻塞UI线程,可以使用异步编程技术,如`...
综上所述,通过采用窗体异步更新、WSE、基于WebBrowser的富文本编辑器以及试题的导入导出功能等关键技术,可以显著提升在线考试系统的用户体验和安全性。这些技术的应用不仅解决了传统考试方式存在的问题,还为在线...
- **HTML内容**:如果Server.Execute返回HTML,可以使用WebBrowser控件来显示内容,或者使用HTML解析库(如HtmlAgilityPack)来提取所需信息。 - **自定义数据格式**:如果是自定义格式,如JSON或XML,可以使用...
3. **多线程**:为了实现网页的异步加载,避免阻塞用户界面,易语言的多线程技术可以派上用场。创建新的工作线程来加载网页,主线程则负责显示用户界面。 4. **控件操作**:在易语言中,可能使用了WebBrowser控件...
因此,理解内存管理、多线程和性能优化技术对于构建高效的CEF爬虫至关重要。 8. **错误处理和异常安全**:在编写CEF爬虫时,必须考虑网络错误、页面加载失败等情况,并编写相应的错误处理代码,以确保程序的健壮性...
7. **线程安全**:由于网络I/O操作是异步的,我们可能需要使用BackgroundWorker或Task来避免阻塞主线程,确保用户界面的响应性。 8. **安全性**:考虑到网络请求可能涉及敏感信息,需要使用HTTPS来加密通信。C#中的...
8. **多线程或异步下载**:为了提高下载效率,源码可能采用了多线程或异步下载的方式,允许同时处理多个下载任务。 9. **进度显示**:对于用户友好的界面,源码可能还包含了下载进度的实时显示,易语言提供事件驱动...