首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用AngleSharp评估javascript

使用AngleSharp评估javascript
EN

Stack Overflow用户
提问于 2020-10-06 07:00:29
回答 1查看 266关注 0票数 0

在执行查询之前,我正在尝试评估页面上的javascript,因为我要查找的html在AngleSharp文档中不存在。

有一个方法: document.ExecuteScript(string )

但与其他库的使用方式相比,我不知道如何使用它。例如,一些python代码看起来像这样...

代码语言:javascript
复制
wait.until(presence_of_element_located((By.ID, "class-name")))

我猜这只会暂停代码,直到整个页面都被评估。然后可以搜索元素。

在AngleSharp中,看起来我必须运行ExecuteScript方法才能做同样的事情。但它只是抛出一个异常(Jint.Runtime.JavaScriptException:'results is not defined'),并返回一个对象作为结果-这完全是混淆的,没有任何帮助。

我该怎么做才能让我的下一条命令:

代码语言:javascript
复制
IHtmlCollection<IElement> cells = document.QuerySelectorAll(s);

实际上浏览了整个文档,而不仅仅是最初的HTML?

EN

回答 1

Stack Overflow用户

发布于 2020-10-07 06:53:32

我认为这里不仅仅有一个问题。所以我就把它分解一下。

首先,让我们在这里了解一些基础知识:

  1. AngleSharp是一个浏览器核心-它不是一个浏览器,也不是一个JS engine.
  2. AngleSharp提供了扩展它的能力,例如,一个JS引擎。

现在来看具体的内容:

ExecuteScriptAngleSharp.Js的一个小帮助器,它实际运行您提供的一段JS代码。我猜这根本不是你想要的。

如果您只是想“等待”,那么您可以使用几行C#代码来实现:

代码语言:javascript
复制
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实例。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64217262

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档