我在WPF中使用的GeckoFX 60浏览器具有一个评估脚本方法,该方法接受javascript代码(以字符串形式)。
我做了什么:
document.getElementById('date').innerText
给了我我需要的信息(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);
我认为这与YouTube上的动态DOM有关。虽然无法按元素ID检索值,但在按类名的另一个Tag上找到了相同的信息:
_gfxBrowser.Document.GetElementsByClassName("watch-time-text")[0].TextContent
返回:"Published on Jan 25, 2019"