我在WPF中使用的GeckoFX 60浏览器有一个评估脚本方法,该方法接受javascript代码(以字符串的形式(。
我做了什么:
- 寻找YouTube视频来测试我的javascript代码
- 将
document.getElementById('date').innerText
放在控制台上为我提供了所需的信息 - 回到我的 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 字符串为空
我所期望的:
我希望它返回我在浏览器上输入 js 代码时控制台显示的•Jan 30, 2008
。
到目前为止,当从YouTube视频中获取其他信息时,这些代码行对我有用(在控制台和我的wpf应用程序的GeckoBrowser上(:
js.EvaluateScript("document.title", out videoTitle);
= 获取视频标题
js.EvaluateScript("document.URL", out videoId);
= 获取视频 URL(然后我过滤掉它以仅获取 c# 中的视频 ID(
我尝试过的其他一些方法都没有奏效:
A. 使用 GeckoElement 并检索浏览器的文档及其文本内容
GeckoElement elem = YouTubeBrowser.Document.GetElementById("date");
videoDate = elem.textContent;
B. 使用 GeckoElement 并检索浏览器的 DomDocument 及其文本内容
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 检索值,但我在另一个按类名标记上找到了相同的信息:
_gfxBrowser.Document.GetElementsByClassName("watch-time-text")[0].TextContent
回报:"Published on Jan 25, 2019"