无法将数组项传递给 PhantomJS 中的函数

2023-12-13

我正在尝试将源代码同时提取到多个网页。这些链接通过源文本文件输入到数组中。我能够迭代数组并打印出链接并确认它们存在,但是当尝试通过函数传递它们时,它们在第一次迭代后变得未定义。

我的最终目标是将每个页面的源代码保存到自己的文档中。它正确执行第一页,但后续尝试未定义。我已经搜索了几个小时,但如果有人能指出我正确的方向,我将不胜感激。

var fs = require('fs');
var pageContent = fs.read('input.txt');
var arrdata = pageContent.split(/[\n]/);
var system = require('system');
var page = require('webpage').create();
var args = system.args;
var imagelink;
var content = " ";

function handle_page(file, imagelink){
    page.open(file,function(){
        var js = page.evaluate(function (){
            return document;
        });
        fs.write(imagelink, page.content, 'w');
        setTimeout(next_page(),500);
    });
}
function next_page(imagelink){
    var file = imagelink;
    if(!file){phantom.exit(0);}
    handle_page(file, imagelink);
}

for(var i in arrdata){
    next_page(arrdata[i]);
}

我现在意识到 for 循环只会迭代一次,然后其他两个函数会创建自己的循环,所以这是有道理的,但在运行它时仍然存在问题。


PhantomJS 的page.open()是异步的(这就是为什么有回调)。另一件事是page.open()是一个漫长的操作。如果进行两次此类调用,第二次调用将覆盖第一个调用,因为您正在同一台计算机上进行操作page object.

最好的方法是使用递归:

function handle_page(i){
    if (arrdata.length === i) {
        phantom.exit();
        return;
    }
    var imageLink = arrdata[i];
    page.open(imageLink, function(){
        fs.write("file_"+i+".html", page.content, 'w');
        handle_page(i+1);
    });
}
handle_page(0);

其他一些事情:

  • setTimeout(next_page(),500);立即调用next_page()无需等待。你自找的setTimeout(next_page, 500);,但是这样也行不通,因为没有参数next_page只需退出即可。
  • fs.write(imagelink, page.content, 'w') that imagelink可能是一个 URL,在这种情况下,您可能想要定义另一种方式来设计文件名。
  • While for(var i in arrdata){ next_page(arrdata[i]); }在这里工作请注意,这不适用于所有数组和类似数组的对象。使用愚蠢的 for 循环,例如for(var i = 0; i < length; i++) or array.forEach(function(item, index){...})如果有的话。
  • page.evaluate()是沙箱并提供对 DOM 的访问,但所有不可 JSON 序列化的内容都无法从中传递出去。在将其传递出去之前,您必须将其转换为可序列化的格式evaluate().
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无法将数组项传递给 PhantomJS 中的函数 的相关文章

  • 访问sendBeacon发送的数据

    文档表明sendBeacon通过发送其数据HTTP POST request 但在 PHP 中 POST变量似乎是一个空数组 这是我的 JavaScript 代码 navigator sendBeacon beacon log php My
  • 用隐藏单元格补充 colspanned 表格有什么不好吗?

    我一直在表格上开发一些排序和选择功能 我发现在具有跨单元格的表格中定位非常困难 我只是添加了跨区单元格并将其隐藏 它看起来不错 它与我的 js 一起工作 非常适合索引 但我想知道这是否是合法的方法 stuffing display none
  • VBA / HTML / jQuery 选择自动完成 - 在列表中选择

    我正在尝试使用 Excel 中的 VBA 在网站的列表中选择一个值 这不是一个 正常列表 该网站使用 jQuery 选择自动完成 如下所示 example http davidwalsh name demo jquery chosen ph
  • jQuery 选择 # id 以单词为前缀,计数器为后缀

    有没有办法用 jQuery 选择所有带有前缀 my 和后缀 0 9 的 id 像这样的 my 1 4 还是可以用循环来实现 div div div div div div div div div div 第一个想法 似乎效果很好 div i
  • 如何仅在 NextJS 站点构建期间使用 getInitialProps?

    当使用 NextJS 构建静态站点时 我想要getInitialProps方法仅在构建步骤期间触发 而不是在客户端上触发 在构建步骤中 NextJS 运行getInitialProps 方法 https nextjs org docs fe
  • 检查 touchend 是否在拖动后出现

    我有一些代码可以更改表的类 在手机上 有时表格对于屏幕来说太宽 用户将拖动 滚动来查看内容 但是 当他们触摸并拖动表格时 每次拖动都会触发 touchend 如何测试触摸端是否是触摸拖动的结果 我尝试跟踪dragstart和dragend
  • jquery window.open 在 ajax 成功中被阻止

    尝试在我的 ajax 成功调用中打开一个新的浏览器窗口 但是 它被阻止为弹出窗口 我做了一些搜索 发现用户事件需要绑定到 window open 才能避免这种情况发生 我还找到了这个解决方案 您可以在 ajax 之前打开一个空白窗口 然后在
  • 仅一页 JavaScript 应用程序

    您是否尝试过单页 Web 应用程序 即浏览器仅从服务器 获取 一页 其余部分由客户端 JavaScript 代码处理 此类 应用程序页面 的一个很好的例子是 Gmail 对于更简单的应用程序 例如博客和 CMS 使用这种方法有哪些优点和缺点
  • Javascript - 将值从下拉框传递到 Google Maps API

    我正在使用 Google 地图 API 为一家出租车公司创建报价表 目前 用户在 2 个文本框中输入出发点和接载点 API 会计算两点之间的距离以及行程费用 我正在尝试添加两个具有设定位置的下拉框 以便用户可以选择这些位置之一或使用文本框输
  • 将 2D NumPy 数组按元素相乘并求和

    我想知道是否有一种更快的方法 专用 NumPy 函数来执行 2D NumPy 数组的元素乘法 然后对所有元素求和 我目前使用np sum np multiply A B 其中 A B 是相同维度的 NumPy 数组m x n 您可以使用np
  • 如何使JavaScript函数在Eclipse“大纲视图”中可见?

    我有这样的代码 但如果它在匿名函数中定义 则无法打开函数大纲 类没有问题 我该如何概述something2 请分享一些提示 我可以将所有函数标记为构造函数 但这是无效的方法 start of track event required deb
  • 淡出和循环一组 div 的最佳方式

    假设我有以下 div div class a You are funny div div class b You are smart div div class c You are cool div 最好的展示方式是什么div a持续 5
  • 如何在Java中正确删除数组[重复]

    这个问题在这里已经有答案了 我刚接触 Java 4 天 从我搜索过的教程来看 讲师们花费了大量精力来解释如何分配二维数组 例如 如下所示 Foo fooArray new Foo 2 3 但我还没有找到任何解释如何删除它们的信息 从内存的情
  • 当用户单击链接时,如何记录 MixPanel 事件?

    当用户单击某种类型的链接时 我试图在 MixPanel 中记录一个事件 我正在使用 JQuery 不引人注意地完成此操作 据我所知 我需要添加一个回调函数 以便在记录事件后将用户带到 URL 这是我正在使用的代码 不幸的是
  • Select2 下拉列表动态添加、删除和刷新项目

    这让我发疯 为什么 Select2 不能在其页面上实现清晰的方法或示例如何在 Select2 上进行简单的 CRUD 操作 我有一个 select2 从 ajax 调用获取数据
  • 无法在前端使用 JavaScript Fetch API 将文件上传到 FastAPI 后端

    我正在尝试弄清楚如何将图像发送到我的 API 并验证生成的token那是在header的请求 到目前为止 这就是我所处的位置 app post endreProfilbilde async def endreProfilbilde requ
  • 数据表日期范围过滤器

    如何添加日期范围过滤器 like From To 我开始进行常规搜索和分页等工作 但我不知道如何制作日期范围过滤器 我正在使用数据表 1 10 11 版本 My code var oTable function callFilesTable
  • 如何在 javascript 正则表达式中匹配平衡分隔符?

    我原以为这个问题是不可能的 据我所知 Javascript 的正则表达式既没有递归插值 也没有漂亮的 NET 平衡组功能 但问题就在那里 如问题 12 所示正则表达式 alf nu http regex alf nu 匹配平衡对 lt an
  • KeyboardAvoidingView - 隐藏键盘时重置高度

    我正在使用 React NativeKeyboardAvoidingView设置我的高度View当显示键盘时 但是当我关闭应用程序中的键盘时 视图的高度不会变回原来的值
  • 单击列表时使用 bootstrap Dropdown 防止下拉菜单消失

    我正在使用使用引导下拉菜单 http twitter github com bootstrap javascript html dropdowns生成下拉菜单 我想防止点击菜单时菜单消失 我已经实现了以下代码 但它不起作用 知道如何修复它吗

随机推荐

  • 如何在 Excel VBA 表单中嵌入浏览器?

    以前我用过微软的网页浏览器许多 VB6 和 Excel VBA 表单中的控件 我需要再做一次 但我不知道该怎么做 我尝试打开一个旧的 VB6 项目 但收到以下错误消息 Line 17 Class SHDocVwCtl WebBrowser
  • 在虚拟机上自动进行测试,无需图形会话

    语境 我在 Windows 上运行并使用 UFT Ranorex 在虚拟机 很少 上执行自动化 GUI 测试 执行由 Jenkins 进行试点 Problem VM 必须有一个活动的graphic会话 否则 UFT 将不会运行 GUI 测试
  • 在 flutter 中构建应用程序 2 次后构建失败

    在 VS code 中构建我的 flutter 应用程序后 我成功运行了该应用程序 一切正常 但在应用程序重新启动两次或多次后 每当我再次运行代码时 构建都会失败 这是弹出的错误 Target debug android applicati
  • iOS swift NumberFormatter 十进制样式本地化

    我正在与NumberFormatter Style decimal我需要 20000 23 应该是 20 000 23 因为我创建了一个扩展 var NumerWithDecimalPoint String if self let numb
  • mysql 中的 GROUP BY 特性 [关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 我有以下 SQL 表和查询 如 sqlfiddle 中所示 http sqlfiddle com 2 37eda 1 0 当前结果如下所示 id definition id serv
  • 列出 Windows 中打开文件句柄的所有者进程?

    我目前在程序的事件查看器中收到 句柄不足 错误 列出哪些进程正在使用文件句柄的好程序是什么 一个例子是 nix 世界中的 lsof 使用流程浏览器 http technet microsoft com en us sysinternals
  • 在 CIFilter 中使用 CIColor 中的 CIImage:获取空图像

    我正在尝试创建一个具有混合模式 如叠加或乘法 的 CIFilter 相关代码 Let s try a filter here Get the data NSData imageData UIImageJPEGRepresentation i
  • 从周数查找一周的开始结束日期

    我使用 servlet 和 JSP 构建了一个 Web 应用程序 并在 Servlet 内计算了周数 private int findWeekNumber String myDate throws ParseException Simple
  • Auto Div 高度取决于另一高度

    我有以下情况我希望 Div2 高度根据 Div3 的内容调整大小 我怎样才能做到这一点 DIV1 DIV2 DIV3
  • Chrome 扩展程序可从脚本中提取文本

    我正在尝试使用 Chrome 扩展的 JS 从脚本标记中提取 webId 22 22 var 字符串 我当前正在使用的示例允许我提取页面标题 payload js chrome runtime sendMessage document ti
  • 根据另一个数据框更改数据框的值

    我再次需要您的帮助来解决一个对于初学者 R 用户来说不太清楚的可能简单的问题 我需要操作一个数据框来替换NA值由 现实 的值来满足另一个应用程序 数据帧包含 3 0 的值 这是原始数据库中无效值的标志 我需要的是用来自另一个数据帧的数据替换
  • 如何在 Touch UI 中添加强制下拉字段

    我将 必需 添加为 真实 但它不起作用 required 为 true 仅适用于文本字段 根据下面的文档 我没有看到任何从下拉列表中添加必填字段的选项 http docs adobe com docs en aem 6 0 author a
  • 为什么 Promise.then 'onFulfilled' 函数在 setTimeout 回调之前触发? [复制]

    这个问题在这里已经有答案了 有人可以解释为什么 Promise then 函数在 setTimeout 函数之前触发吗 我本以为 setTimeout 函数会首先安排在事件循环上 所以它会在 Promise then 函数之前运行 setT
  • 运算符如何重载|专门实现了 C++ 范围适配器?

    自从范围被合并到 C 20 中以来 我一直在查看标题以了解如何operator 对于范围视图来说超载 但我找不到关于如何或在何处实现它的正确轨道 C R 相当于R C根据https en cppreference com w cpp ran
  • Makefile - 移动目标文件

    经过一番搜索后 我成功地将以下 Makefile 放在一起 CC gcc CFLAGS c Wall LDFLAGS SOURCEFILES main c SOURCES src SOURCEFILES OBJECTS SOURCES c
  • Codeigniter 2.1.3 的 SMTP Gmail 错误

    我看过很多与此问题相关的帖子 我已经完成了给出的说明 但总是遇到相同的错误 我想使用 Code Igniter 2 1 3 发送 smtp gmail 这是代码 class Email extends CI Controller funct
  • 使用 SSIS 压缩文件夹

    我正在尝试压缩 SSIS 中的一个文件夹 源文件夹中有 12 个文件 我需要压缩该文件夹 我可以很好地压缩文件 我的问题是文件夹 我必须使用 winzip 来创建压缩包 谁能给我指点一个好的教程 我无法实现我找到的任何示例 Thanks 添
  • 将字典拆分为 df 中的各个列[重复]

    这个问题在这里已经有答案了 我有以下内容df其值是字典 tests SO4 Mon 6 Tues 6 Wed 7 CH3 Mon 0 Tues 8 Wed 10 我想获得所需的输出 0 1 2 SO4 Mon 6 Tues 6 Wed 7
  • Android:如何根据首先选择的单选按钮启用/禁用复选框

    基本上我有一个带有两个单选按钮的单选组 其中一个标记为 运行 另一个标记为 通过 就在其下方 我还有一个标记为 通过完成 的复选框 问题 如何在选择 运行 单选按钮时禁用该复选框 因此无法选择该复选框 并在选择 通过 单选按钮时启用它 任何
  • 无法将数组项传递给 PhantomJS 中的函数

    我正在尝试将源代码同时提取到多个网页 这些链接通过源文本文件输入到数组中 我能够迭代数组并打印出链接并确认它们存在 但是当尝试通过函数传递它们时 它们在第一次迭代后变得未定义 我的最终目标是将每个页面的源代码保存到自己的文档中 它正确执行第