如何在终端中直接查看[网页]的源代码?

如何在终端中直接查看[网页]的源代码?

我听说过 lynx 和 links 以及其他基于文本的浏览器,它们都很好,但我希望获得与View Page Source在 Firefox 中执行时相同的信息。 (IE 和 Chrome 有自己类似的功能。)

是否可以通过终端(或 CLI)浏览基于终端的应用程序中页面或使用命令来查看此源?这不像wget在页面上使用那么简单,因为那样不会填充脚本信息(.cgi、.php、.js 等)。

答案1

许多 CLI/TUI 浏览器都内置了源代码查看功能。在 Lynx 或 Links 中,查看源代码的键绑定是\。在 w3m 中则是v。对于其他浏览器,请参阅相关文档。

答案2

可能有两种简单的方法可以获取您想要的内容(例如返回的文本view-source:):

假设已安装 Python,你可以使用pip(类似python -m pip install requests)获取请求,也可以访问请求 PyPi 页面

请注意,无论哪种情况,你都应该花点时间选择一个合适的用户代理字符串。你可以谷歌搜索“我的用户代理字符串是什么?”在您希望模拟的任何浏览器中查看与您的 GUI 浏览器关联的当前 User-Agent 字符串。


另一个可能的选择是使用 Python。Selenium 在技术上用于浏览器自动化,但根据命令行要求,您可以在任何支持“无头”(非 GUI)模式的浏览器中使用它。这包括当前版本的 Chrome 和 Firefox。

Python 版本的 Selenium 可在吡啶甲酸你可以使用例如来安装它python -m pip install selenium。对于浏览器,我建议使用Woolyss 提供的 UnGoogled Chromium 版本chromedriver,因为它们比较轻量,并且附带有适当的版本。


获得

按照@Attie 和@ivanivan 的建议,wget可以使用以下命令检索 GUI 浏览器显示的相同源代码前任。

wget -O pagesource.html -U "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:54.0) Gecko/20100101 Firefox/54.0" --no-check-certificate https://www.google.com

在上面的例子中,-O(输出文件选项)和-U(User-Agent 字符串选项)是(通常)检索与 Firefox 中相同的格式的关键。这种方法确实有一个小缺点,您需要显示例如 pagesource.html在命令行上自己。


Python

您的另一个选择是使用带有请求的 Python,正如前面提到的。

为了获得通常所见的实际页面源代码view-source:,请创建类似以下内容的脚本:

import requests

user_agent = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:54.0) Gecko/20100101 Firefox/54.0'}
url = 'https://www.google.com'

response = requests.get(url, headers=user_agent)

print(response.text)

你可以将此脚本保存为类似页面源文件,然后从命令行调用它前任。

python pagesource.py | more

more只是防止一次性转储整个页面。值得一提的是,响应对象有一个属性(与我们的目的content非常相似),但在这种情况下,它更接近于模拟 GUI 浏览器在查看页面源代码时返回的内容。texttext


如果使用 Selenium,访问网页源代码的一个选项是page_source使用 后使用远程驱动程序对象的属性get()


页面渲染

这并不像wget在页面上使用那么简单,因为那不会填充脚本信息(,,,.cgi等等)。.php.js

通过服务器端脚本(问题中的.cgi/ )呈现的页面的源代码生成为文本(即 JavaScript).php.html被交给浏览器。

使用 JavaScript,浏览器会将任何 JavaScript 处理成最终呈现的页面本身(不存在“中间”形式)。在这些情况下,浏览器实际上可以更改页面代码(即它可能会修改您在 中看到的内容view-source:)。同样,浏览器会采取额外步骤来跟踪链接并下载必要的资源(例如.css,媒体文件等)以供最终显示。

这意味着您在浏览器的“页面源代码”中看到的内容(一般来说)正是浏览器最初呈现页面时使用的内容。如果.html指向某个项目(例如图片或视频)的链接不存在,则该项目不存在(尽管这并不一定排除任何 JavaScript 代码提供信息)。

话虽如此,您可能希望注意并尝试不同的 User-Agent 字符串。动态生成内容的服务器通常基于这些字符串进行操作。因此,至少从理论上讲,页面可能会根据移动浏览器字符串与桌面浏览器字符串等生成更传统的资源链接而非 JavaScript 代码。

相关内容