当我转到此网页(例如https://imgur.com/user/Ultraruben/submitted)并按Ctrl+u
时,我得到一个网页。当我尝试通过命令行提取html时,curl <url>
或者curl -L <url>
我得到另一个。
lynx -dump <url>
也不起作用(没有javascript)。
我需要通过命令行(使用任何有效的工具),就像通过浏览器使用Ctrl+u
.
这是我通过 Opera 浏览器得到的:https ://justpaste.it/42ci1 这是 curl:https ://justpaste.it/9oy3g
网站对他们看到的具有不同内容的客户端做出反应是很常见的。
其中一些是善意的:例如,一些网站竭尽全力支持非常旧的手机或 Windows PC。从安全的角度来看,您希望告诉 Internet Explorer 5 用户他们需要更新 - 但您的工作可能是帮助向公众提供健康信息,而不是告诉没有钱的人他们需要购买一台新的笔记本电脑。
有时,您需要支持带有特别古怪网站的旧游戏设备,以使其浏览器满意,或者提供针对屏幕优化的网站版本。
无论如何,这可能就是这里发生的事情;您的 curl 发送“嘿,我是 curl”,网络服务器会使用专门针对自动化工具的页面做出反应,而不是针对浏览器。
所以,首先:检查如果你告诉 curl 使用与你的主浏览器相同的用户代理,事情是否解决了。也许这已经解决了问题。
如果你说 lynx 不工作是因为它不支持 JavaScript,那么,你需要一个能够完成现代浏览器所做的所有 JavaScript 的东西。这意味着它需要是现代浏览器。有一些方法可以从命令行操纵浏览器。本质上,您正在寻找WebDriver。
如果您不编写几行脚本,这将无法工作。Mozilla 的 WebDriver 文档有一个示例可以帮助您入门。在获得源代码之前,您需要添加一些等待(在加载完成时,加上几分之一秒)以允许 JavaScript 完成。该示例通过等待特定元素开始存在来做到这一点。
使用选项
-H
设置User-Agent
标题。如果您使用 Firefox,您可以打开网络分析器并右键单击获取请求。接下来从上下文菜单中选择“复制为 cURL 地址”。对于 URL
cr.yp.to
,您将获得以下命令: