在执行查询之前,我正在尝试评估页面上的javascript,因为我要查找的html在AngleSharp文档中不存在。
有一个方法: document.ExecuteScript(string )
但与其他库的使用方式相比,我不知道如何使用它。例如,一些python代码看起来像这样...
wait.until(presence_of_element_located((By.ID, "class-name")))我猜这只会暂停代码,直到整个页面都被评估。然后可以搜索元素。
在AngleSharp中,看起来我必须运行ExecuteScript方法才能做同样的事情。但它只是抛出一个异常(Jint.Runtime.JavaScriptException:'results is not defined'),并返回一个对象作为结果-这完全是混淆的,没有任何帮助。
我该怎么做才能让我的下一条命令:
IHtmlCollection<IElement> cells = document.QuerySelectorAll(s);实际上浏览了整个文档,而不仅仅是最初的HTML?
发布于 2020-10-07 06:53:32
我认为这里不仅仅有一个问题。所以我就把它分解一下。
首先,让我们在这里了解一些基础知识:
现在来看具体的内容:
ExecuteScript是AngleSharp.Js的一个小帮助器,它实际运行您提供的一段JS代码。我猜这根本不是你想要的。
如果您只是想“等待”,那么您可以使用几行C#代码来实现:
var maxTime = TimeSpan.FromSeconds(1.5);
var totalTime = TimeSpan.Zero;
var pollTime = TimeSpan.FromMilliseconds(25);
while (totalTime < maxTime)
{
await Task.Delay(pollTime.Milliseconds);
// check condition
if (document.QuerySelector(".foo.bar") != null)
{
// run zoned code
break;
}
totalTime += pollTime;
}AngleSharp.Js实际上有多种进入事件循环的方法,即等待JS完成当前工作。
例如,WaitUntilAvailable()可用于等待,直到处理完load事件(和相关事件)。
为了将一些操作排入队列,添加了Then()扩展方法。所有这些扩展方法都直接依赖于IDocument实例。
https://stackoverflow.com/questions/64217262
复制相似问题