如何使用GeckoFX 60的评估脚本方法获得youtube视频的上传日期?

问题描述 投票:1回答:1

我在WPF中使用的GeckoFX 60浏览器具有一个评估脚本方法,该方法接受javascript代码(以字符串形式)。

我做了什么:

  1. 寻找YouTube视频来测试我的JavaScript代码
  2. 在控制台上放置document.getElementById('date').innerText给了我我需要的信息
  3. 回到我的WPF应用程序并放置了它:

(C#)

string videoDate = "";
using (Gecko.AutoJSContext js = new Gecko.AutoJSContext(YouTubeBrowser.Window))
{
    js.EvaluateScript("document.getElementById('date').innerText", out videoDate);
}
NewProject.VideoDate = DateTime.Parse(videoDate);

问题:

它捕获了一个错误,所以我在分析字符串之前放了一个中断,发现videoDate字符串为null

我期望的是:

我希望它返回在浏览器中输入js代码时控制台显示的•Jan 30, 2008

到目前为止,当从YouTube视频中获取其他信息时,这些代码行都对我有用(在控制台和wpf应用程序的GeckoBrowser上都可以使用:

js.EvaluateScript("document.title", out videoTitle); =获取视频标题

js.EvaluateScript("document.URL", out videoId); =获取视频网址(然后我将其过滤出来,仅在c#中获取视频ID)

我尝试过的其他一些方法都无效:

A。使用GeckoElement并检索浏览器的Document及其textContent

GeckoElement elem = YouTubeBrowser.Document.GetElementById("date");
videoDate = elem.textContent;

B。使用GeckoElement并检索浏览器的DomDocument及其textContent

GeckoElement elem = YouTubeBrowser.DOMDocument.GetElementById("date");
videoDate = elem.textContent;

C。将innerText更改为textContent(基于另一个SO答案,我发现Firefox无法理解innerText(这很奇怪,因为它在控制台上工作,但是我想他们稍后会添加对此的支持),而是使用textContent来检索值)

string videoDate = "";
using (Gecko.AutoJSContext js = new Gecko.AutoJSContext(YouTubeBrowser.Window))
{
    js.EvaluateScript("document.getElementById('date').textContent", out videoDate);
}
NewProject.VideoDate = DateTime.Parse(videoDate);
c# geckofx
1个回答
0
投票

我认为这与YouTube上的动态DOM有关。虽然无法按元素ID检索值,但在按类名的另一个Tag上找到了相同的信息:

_gfxBrowser.Document.GetElementsByClassName("watch-time-text")[0].TextContent

返回:"Published on Jan 25, 2019"

© www.soinside.com 2019 - 2024. All rights reserved.