【问题标题】:c# asp.net use Windows Forms WebBrowserc# asp.net 使用 Windows Forms WebBrowser
【发布时间】:2010-01-15 13:52:15
【问题描述】:

我有一类库代码,它使用 System.Windows.Forms.WebBrowser 控件加载网页,然后从 DOM 树中提取信息等...我发现这是唯一可靠的方法能够解析使用 javascript 等加载到页面上的信息...

这在使用控制台应用程序进行测试时效果很好,但是当我从 asp.net 页面(ASP.NET MVC 控制器)调用相同的方法时,它会因“ActiveX 控件'8856f961-340a-11d0-a96b-00c04fd705a2'而崩溃”无法实例化,因为当前线程不在单线程单元中。”...我尝试将 [STAThread] 添加到我的方法中,但这似乎没有帮助!

有什么想法吗?

谢谢

更新:

我需要允许页面完成加载并执行其所有 javascript,然后搜索与我已存储的模板匹配的文本...不认为 HtmlAgilityPack 会工作吗? WatIn 是否运行 javascript?

【问题讨论】:

    标签: c# asp.net winforms


    【解决方案1】:

    省去很多麻烦,使用WatiN 代替WebBrowser 控件。

    看到这个问题:Best method for Website Automation?

    【讨论】:

      【解决方案2】:

      我相信让 IIS 在单线程单元模型 (STA) 中运行是不可能的。您可以查看HTML Agility Pack,而不是使用WebBrowser 控件。它将让您在网页中阅读并浏览 DOM。 WebBrowser 控件使用大量计算机资源,您不必担心它会进行切换。

      【讨论】:

        【解决方案3】:

        System.Windows 中的所有内容都适用于桌面,而不是 Web 内容。我同意 Jake Pearson 的观点,即您应该使用其他东西。但是,如果您愿意,可以尝试使用此指令强制页面进入 STA 模式:

        <%@Page AspCompat="true"%>
        

        http://msdn.microsoft.com/en-us/library/zwk9h2kb.aspx

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-08-09
          • 1970-01-01
          • 1970-01-01
          • 2019-05-22
          • 2010-12-25
          • 2016-10-04
          相关资源
          最近更新 更多