【问题标题】:Retrieve a URL in PhantomJS, not through the client在 PhantomJS 中检索 URL,而不是通过客户端
【发布时间】:2012-10-14 13:22:33
【问题描述】:

有没有办法在不通过 QTWebKit 客户端的情况下在 PhantomJS(或 CasperJS)中下载文件?

我想从与正在测试的页面无关的 URL 下载以 JSON 编码的数据。

从 PhantomJS API 或 CasperJS API 中看不出如何做到这一点,因为它们的功能似乎是为了在诡异的客户端中打开 URL。

我希望人们可以简单地运行类似的东西:

  fetch(URL, callback);

下载到 PhantomJs 页面然后到客户端的普通过程是有问题的,原因有两个。首先,它缓慢且麻烦。其次,它违反了同源策略(因此 CasperJS base64encode 函数将不起作用)。

在最基本的情况下,我希望 PhantomJS 客户端的 javascript 运行程序能够实现 XMLHttpRequest(或类似的东西),但我想知道是否有更规范的东西可用。

编辑

也许可以只包含 jQuery 并使用 $.ajax,但不幸的是,这也会引发同源异常:

XMLHttpRequest 无法加载 http://example.com:5000/test。 Access-Control-Allow-Origin 不允许使用原始文件://。

我能想出的唯一解决方案是在单独的进程中(例如使用 wget)下载我想以 JSON 格式访问的文件,但由于 PhantomJS does not permit execution of processes(在撰写本文时),它似乎必须与 PhantomJS 分开启动。

【问题讨论】:

  • 您是否尝试使用--web-security=no 选项?从理论上讲,这将允许绕过 CORS 政策。
  • @NiKo: --web-security=no 仅在 page 上下文中禁用同源策略,而不是在幻像本身中。

标签: phantomjs casperjs


【解决方案1】:

你可以试试看

casper.download(String url, String target[, String method, Object data])

来自http://docs.casperjs.org/en/latest/modules/casper.html#download

我不确定您想对下载的数据做什么,但是您可以使用 PhantomJS 的 injectJS()includeJS() 并传入本地文件以便在页面中使用该数据正在测试中。

【讨论】:

  • 感谢您发布 hexid。抱歉,download 功能没有实现所需的功能。它Saves a remote resource onto the filesystem. 我想要的功能是将任意资源(即不一定对远程系统可用)下载到内存(而不是文件系统)。不过,我很欣赏这篇文章。
  • Phantom 可以访问本地文件系统。因此,您可以轻松下载文件,使用 PhantomJS 打开它,然后使用 injectJS() 将其注入到任何上下文中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-02-16
  • 2020-07-24
  • 1970-01-01
  • 1970-01-01
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多