首页 > 解决方案 > 可以从命令行使用 chrome 将 URL 的内容检索到文件中吗?

问题描述

我一直在让自己发疯,试图让 curl、wget、python 请求模块和其他模块简单地让我登录到一个网站并在那里提取页面文本。我当然可以从站点请求 HTML,但只能作为匿名用户。我已经花了几个小时使用 chrome 的“复制 cURL”功能之类的技巧,但有问题的网站足够聪明,可以防止登录回放。

我想要的只是一种从命令行执行以下操作的方法:

chrome.exe --output_to_file page.html https://www.endpoint.com/auth_access_only.html

本质上,我正在寻找 chrome 来为我做 cURL 所做的事情,但我希望命令行调用能够像我一样执行。我可以看到这可能会引发潜在的安全问题,但我完全不介意我必须做一些神奇的事情来授权我的脚本。我不想做任何邪恶的事情——我只想能够编写像我一样“我”的脚本。

我想,如果它真的无法避免,我可以把它吸干并从 Internet Explorer 上掸掉。我真的不想那样做。我会觉得很脏。

标签: google-chromecookiescommand-linecmdscripting

解决方案


这是可能的,但它并不像你想象的那么简单。

您可以使用Chrome 调试协议来远程控制 Chrome。

您需要编写一些代码来完成这项工作——我使用chrome-remote-interfaceNode.js 的库完成了类似的任务。

确保您了解浏览器配置文件是什么以及您的配置文件文件夹所在的位置。

如果 Chrome 已经在使用您的浏览器配置文件运行:确保它是使用--remote-debugging-port=9002或类似方式启动的。

如果 Chrome 尚未使用您的浏览器配置文件运行:使用--user-data-dir="C:\path\to\your\profile" --remote-debugging-port=9002或类似方式启动它。

“是否运行”部分有点棘手 - 您不能使用相同的浏览器配置文件启动多个 Chrome 实例,但您需要使用此用户配置文件,因为您的登录数据存储在那里。实际上,最简单的方法可能是创建一个单独的浏览器配置文件,仅用于此自动化任务,然后也登录到那里的站点。

然后,在高层次上,您的 Node.js 代码将需要连接到 Chrome、加载页面、等待响应并将其保存到文件中。看看这个chrome-remote-interface库的示例代码——你绝对可以从那里拼凑你需要的东西。


使用相同底层技术的另一个选项是使用puppeteer另一个工具来自动化 Chrome。它旨在每次都从一个新的配置文件开始。如果这样做,则需要编写更多交互脚本:

  • 访问网站的登录页面
  • 在表单中输入登录凭据,然后单击登录按钮
  • 访问站点的认证页面并将其保存到文件中。

这种方法的好处是结果应该更可靠,防止出现登录会话过期等问题。


推荐阅读