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

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

【问题讨论】:

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

标签: c# optimus


【解决方案1】:

相当简单的工具包:

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

    Engine engine = new Engine();

  2. 打开要检索的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 向会话/标题添加了一些内容,使得简单的导航无法正常工作。
猜你喜欢
  • 1970-01-01
  • 2013-02-21
  • 2012-04-27
  • 2015-03-12
  • 2012-04-10
  • 2011-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多