带有 C# 的 Optimus 无头浏览器

Posted

技术标签:

【中文标题】带有 C# 的 Optimus 无头浏览器【英文标题】:Optimus headless browser with C# 【发布时间】:2017-10-16 21:08:54 【问题描述】:

谁能告诉我如何使用带有 C# 的 Optimus(无头浏览器)nuget 包从 URL 获取响应。我还希望页面上的 javascript 像 phantomjs 一样自动执行。

【问题讨论】:

你试过project's example code吗? 是的,我确实尝试过,但示例代码非常基础。我想要一个更详细的例子。 确实 Optimus 的文档很短。很难知道如何使用它 你的问题太笼统了。如何打开 URL 在示例中。你到底想做什么?你想要哪些细节? 【参考方案1】:

相当简单的工具包:

    首先创建一个引擎组件(动态和静态页面通用):

    Engine engine = new Engine();

    打开要检索的html文档的url:

    a) 不等待使用 javascript 添加的任何元素:

    engine.OpenUrl("http://google.com").Wait();

    b) 等待使用 javascript 添加的任何元素:

    engine.OpenUrl("http://google.com")

    然后:

    engine.WaitDesappearingOfId("some-id") engine.WaitId("some-id") engine.WaitDocumentLoad() engine.WaitSelector("#some-id") engine.WaitSelector(".some-class")

现在你打开网址,有两种方法 - 加载文档(在执行任何 javascript 之前):

更完整的例子:

public static string dynamicLoadingPage()

    var engine = new Engine();
    engine.OpenUrl("https://html5test.com");
    var tagWithValue = engine.WaitSelector("#score strong").FirstOrDefault();
    System.Console.WriteLine("Score: " + tagWithValue.InnerHTML);

否则:

static string staticLoadingPage()

   var engine = new Engine();
   engine.OpenUrl("http://google.com").Wait();
   Console.WriteLine("The first document child node is: " + engine.Document.FirstChild);
   Console.WriteLine("The first document body child node is: " + engine.Document.Body.FirstChild);
   Console.WriteLine("The first element tag name is: " + engine.Document.ChildNodes.OfType<HtmlElement>().First().TagName);
   Console.WriteLine("Whole document innerHTML length is: " + engine.Document.DocumentElement.InnerHTML.Length);


【讨论】:

如何获取请求的HTTP状态码?在尝试访问 dom 元素之前验证页面是否正确加载是理想的 我已设法加载页面,但找不到任何有关如何与页面交互的文档,例如点击我使用 QuerySelectorAll.Single() 的锚点 - 它只是给了我 IElement 类型的东西,但据我所知,那里没有可点击的东西。 哦,我忘记添加了——我需要单击按钮,而不仅仅是阅读href并导航到它。通过点击执行的 JS 向会话/标题添加了一些内容,使得简单的导航无法正常工作。

以上是关于带有 C# 的 Optimus 无头浏览器的主要内容,如果未能解决你的问题,请参考以下文章

无头浏览器和抓取 - 解决方案 [关闭]

反爬虫中chrome无头浏览器的几种检测与绕过方式

无头浏览器是啥?它有啥用?

教你怎么用JavaScript检测当前浏览器是无头浏览器

无头浏览器

PHP无头浏览器? [关闭]