带有 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 无头浏览器的主要内容,如果未能解决你的问题,请参考以下文章