我如何才能获得这个行为异常的网页的源代码?

我如何才能获得这个行为异常的网页的源代码?

发现 Firefox 和 Edge 中都存在一些奇怪的行为。关闭所有浏览器窗口、重新启动 Firefox 并清除所有“YouTube”Cookie 后,该行为没有改变。

在一个包含 YouTube 频道列表的页面,我可以在新窗口中打开所有频道页面并查看源代码,但有一个除外。列表中的第八个频道“Gallina Puntolina”链接到

如果我在频道列表中单击它,我就会看到该页面,但如果我要求在新窗口中打开它(或者如果我单击此页面上的该链接),我就会看到一个窗口,其中地址栏显示:

其中 URL 已全部改为小写,并且“@”已被删除。该页面为“未找到”错误页面,这是正确的,因为这是一个无效的 YouTube URL。

如果我返回列表页面并单击,就会出现所需的页面,然后我要求提供源代码,我会得到一个选项卡,其中地址栏显示:

HTML 是“未找到”错误页面的代码,该代码再次正确,因为 URL 已更改为无效的 YouTube URL。

最后,如果我返回所需页面并复制 URL(上面带有“@”的 URL),然后打开一个新窗口并将其粘贴到地址栏中,当我按 Enter 键时,URL 会变为小写的无效 URL,没有“@”,并且页面是“未找到”错误页面。如果我粘贴 URL,情况也是一样:

在地址栏中。当我按下 Enter 键时,URL 会转换为小写,不带“@”。

概括:我可以通过点击频道列表中的链接来查看该页面。但我无法通过其他方式获取该页面,也无法查看其源代码。我需要做什么才能获取该页面的源代码?

我为什么关心:我需要源代码来获取频道的 ID。在 YouTube 页面的源代码中,频道 ID 是 的值externalId。因此,如果我无法获取页面的源代码,我需要采用其他方式来获取该频道的频道 ID。


编辑 DevTools

当我最初发布这个问题时,我尝试过 DevTools,但没有发现任何有用的东西,所以我没有提到它。但在对他的答案的评论中,@harrymc 说要从 DevTools 获取源代码,所以我回过头去看,发现了更奇怪的事情。在 Firefox 和 Edge 中都观察到了以下行为。

在 DevTools > Inspector 中,我转到html标签,右键单击并选择“全部展开”(在 Edge 中为“递归展开”),然后再次右键单击并选择“复制 > 外部 HTML”。然后我将剪贴板粘贴到新的文本文件中,并以扩展名“htm”保存。然后我打开该文件。

一开始,加载的似乎是频道列表页面,这表明 DevTools 下载的源代码是链接到此页面的页面的代码,而不是页面本身。但当我再次打开文件时,我注意到浏览器首先显示正确的页面,然后在一秒钟后,该页面消失并被频道列表页面取代。当我刷新页面时,有时我会看到正确的页面,持续一小段时间,然后它变为频道列表,但有时我只会看到频道列表。

我认为这也许意味着 (a) 从 DevTools 下载的源代码是页面的正确来源,但有某种触发器导致它快速访问频道列表页面并用其替换自身,或者 (b) 该文件以某种方式包含两个页面的源代码。但我externalId在文件中搜索了 ,它只出现了一次,后面跟着父频道(频道列表页面的频道)的频道 ID,这表明如果文件包含正确页面的某些部分源代码,它不包含该页面的完整源代码,因为完整源代码应该包括externalId频道的。如上文所述我为何关心,这就是我尝试获取该页面源代码的全部原因。

我希望@harrymc 以及其他一些知识渊博的人能够重现这里描述的行为并解释发生了什么。

答案1

此页面比较棘手。如果您尝试通过右键单击并复制其地址来找到此元素,您将获得 https://www.youtube.com/@GallinaPuntolina,但尝试将其用作 URL 将不起作用。这就是为什么您不能在上下文之外使用此 URL。

如果您跟踪页面的执行情况(例如使用 Fiddler),您将看到嵌入在页面中的 JavaScript 发出的非常不同的请求。

主要请求如下:
https://www.youtube.com/youtubei/v1/browse?key=AIzaSyAO_FJ2SlqU8Q4STEHLGCilw_Y9_11qcW8&prettyPrint=false

然而,如果没有附加到该请求的数据负载,该请求本身就无法工作。

简而言之,您获得的该项目的链接地址具有误导性。真正的请求是由 YouTube 页面发出的,您无法在不深入研究 JavaScript 代码的情况下自行构建。

这种复杂性可能不是故意的,只是开发人员没有经过深思熟虑就完成了。

相关内容