PhantomJS 节点 - page.open - 无法跟踪多个页面

2023-12-03

我在用着幻影节点将节点与 PhantomJS 接口。我正在尝试并行打开页面,但问题是page.open回调函数不会传回对页面的引用,因此我无法知道哪个页面已完成。

相关代码

self.queue[j].page.open.call( self.queue[j].page, rows[i].url, function( status )
{
   console.log( this ) // <-- returns undefined
   // So how do I keep track of which pages have finished loading?
   // The only variable I have available here is `status`
});

完整功能代码:

SnapEngine.prototype.processSnaps = function( rows, type )
{
var self = this;

if ( ! rows || rows.length === 0 ) return true;

for( var i = 0; i < rows.length; i++ )
{
    // If queue is full, stop processing and wait for next snap engine iteration
    if ( self.getAvailableSizeInQueue() <= 0 )
    {
        self.logger.info( 'Queue is full for signature snap processing' );
        return true;
    }

    // Snapshots are processed by url, if multiple duplication urls are requested, all are updated after one of them is complete
    // So if a url is already being processed, don't reprocess it
    if ( self.findUrlInQueue( rows[i].url ) !== false )
    {
        self.logger.info( 'URL already being processed', url );
        continue;
    }

    for( j = 0; j < self.queue.length; j++ )
    {
        // Find an unused page object
        if ( self.queue[j] && self.queue[j].hasOwnProperty( 'page' ) && ( ! self.queue[j].page.url || self.queue[j].page.url == '' ))
        {
            self.logger.info( 'Opening URL in browser', rows[i].url );

            // Start loading page
            self.queue[j].page.open.call( self.queue[j].page, rows[i].url, function( status )
            {
                // ===== ISSUE HERE =====
                var url = this.url; // <-- this is undefined
                // ======================

                self.resetPage( self.queue[ index ]);

                if ( status === 'success' )
                {
                    self.updateStatus( url, 'ready' );
                }
                else
                {
                    self.updateStatus( url, 'failed' );
                }

                self.removeUrlFromQueue( url )
            });

            self.updateStatus( rows[i].url, 'processing' );
            break;
        }
    }
}
}

试试这样:

我添加了一个直接在打开页面的部分执行的函数,从而引入了一个新的作用域。所以url不会被损坏(你不能使用rows[i].url因为我会在调用您的回调之前进行更改)并将在您的回调中可用。

for( j = 0; j < self.queue.length; j++ )
{
    // Find an unused page object
    if ( self.queue[j] && self.queue[j].hasOwnProperty( 'page' ) && ( ! self.queue[j].page.url || self.queue[j].page.url == '' ))
    {
        self.logger.info( 'Opening URL in browser', rows[i].url );
        (function() {
            var url = rows[i].url;
            // Start loading page
            self.queue[j].page.open.call( self.queue[j].page, url, function( status )
            {                   
                self.resetPage( self.queue[ index ]);

                if ( status === 'success' )
                {
                    self.updateStatus( url, 'ready' );
                }
                else
                {
                    self.updateStatus( url, 'failed' );
                }

                self.removeUrlFromQueue( url )
            });
        })();

        self.updateStatus( rows[i].url, 'processing' );
        break;
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PhantomJS 节点 - page.open - 无法跟踪多个页面 的相关文章

  • 如何向 node-http-proxy 响应添加标头

    我需要在第三方服务上解决CORS 所以我想构建一个代理来添加标头 Access Control Allow Origin 为什么这段代码没有添加标题 httpProxy require http proxy var URL https th
  • 如何制作像Stackoverflow一样的可折叠评论框

    我正在构建一个网站 并且有一个状态更新列表 我希望允许用户为列表中的每个项目撰写评论 但是我正在尝试实现一个类似于堆栈溢出工作方式的用户界面 特别是可折叠的评论表单 列表 用户在其中单击对列表中的特定状态更新添加评论 并且在列表中的该项目下
  • 如何在CKEditor 5中监听焦点事件

    我想听一下 CKEditor 5 中的焦点事件 我认为这样的事情会起作用 但回调从未被调用 document querySelector editable ClassicEditor create el then editor gt edi
  • 区分单击与 mousedown/mouseup

    我已经阅读了有关这种情况的 stackoverflow 上的几个答案 但没有一个解决方案有效 我尝试根据用户是否单击某个元素或使用 jQuery 将鼠标按住该元素来执行不同的操作 有可能做到这一点吗 onMouseDown 将在按下左侧或右
  • Chrome 扩展程序中的后台脚本到底何时运行?

    在我的 chrome 扩展中 我有一个后台脚本 它将使用XMLHttpRequest note that this code is in the global scope i e outside of any function also n
  • 使用 easyXDM 调整 IFrame 大小

    我将 iFrame 代码提供给客户 以便他们可以显示我网站上的动态内容 我希望其页面上的 iFrame 能够调整大小以适合我的内容 我按照 easyXDM 网站的说明进行操作 但也许我遗漏了一些东西 我没有收到任何错误 但 iFrame 保
  • 如何获取数组中最后 5 个元素(不包括第一个元素)?

    在 JavaScript 数组中 如何获取最后 5 个元素 排除第一个元素 1 55 77 88 would return 55 77 88 添加其他示例 1 55 77 88 99 22 33 44 would return 88 99
  • “brew升级节点”后“node -v”显示错误版本

    我升级了 Node js 版本brew upgrade node其中安装了v5 3 0 但是当我得到节点的版本时node v它显示 v0 10 29 I tried brew link overwrite node但这没有用 Brew 已链
  • 页面点击其他路径后 $timeout 继续运行

    我在用yo angular fullstack生成器来构建我的网站 当用户注册该网站时 它将发送一封带有链接的激活电子邮件 当用户点击该链接时 会显示激活成功并超时进入主页 但是 当超时未结束 用户点击页面中的任何其他链接时 会跳转到其他页
  • 用于导出到 CSV/Excel 的数据 URI(无服务器端请求):浏览器支持/限制?

    以下问题 Javascript 或 Flash 导出至 CSV Excel https stackoverflow com questions 8150516 javascript or flash export to csv excel
  • Web浏览器控件:如何捕获文档事件?

    我正在使用 WPF 的 WebBrowser 控件加载一个简单的网页 在这个页面上我有一个锚点或一个按钮 我想在我的应用程序后面的代码中 即在 C 中 捕获该按钮的单击事件 WebBrowser 控件是否有办法捕获加载页面元素上的单击事件
  • 全局定义的 AngularJS 控制器和封装

    根据 AngularJS 的教程 控制器函数仅位于全局范围内 http docs angularjs org tutorial step 04 http docs angularjs org tutorial step 04 控制器函数本身
  • 比较 javascript 元素和 scala 变量的 Play 框架 Twirl 模板

    如下面的代码示例所示 我想比较 scala 辅助元素内的 javascript 元素 然而 即使存在元素 abcde 它也始终返回 false 除了使用标签之外 如何获取 scala 辅助元素内的 javascript 值 appSeq S
  • 如何在 OpenLayers 3 中删除监听器

    我做了一个copy https gis stackexchange com questions 178222 how to delete a listener in openlayers 3我在 stackoverflow 上提出的问题 因
  • Google 地图 v3 中标准缩放控件的样式

    有没有一种简单的方法可以在 Google Maps JavaScript API v3 中设置缩放控件的样式 我想要的只是改变标准图像 http maps gstatic com intl en ALL mapfiles mapcontro
  • while 循环元素状态 cypress

    我有一个问题 我想单击一个按钮直到它消失 但次数可能会有所不同 所以我想检查可见性状态 当可见 true时单击按钮 当可见 false时结束测试 但问题是我不知道如何循环从获取元素到末尾的所有链 单击按钮一次 由于中断而停止 如果我删除中断
  • 在 中动态添加链接样式表 [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 如何将链接
  • 盒式捆绑包与 MVC4 捆绑包

    我目前正在开发一个原型 ASP NET MVC 3 解决方案 该解决方案将用作多个项目重写的基础 来自 Web 表单 我的目标之一是跨应用程序实现一些脚本管理 而不是我们目前没有的目标 MVC 3有一个缺陷恕我直言 如果您需要在部分视图或模
  • 如何仅在第一次访问时弹出模态窗口

    我有一个模式窗口 当您访问某个页面时会弹出 访客必须选择我同意或我不同意 我需要一个漂亮的小 jquery 脚本 它会记住谁之前访问过该页面并同意 这样他们每次访问该页面时就不会弹出模式 有人可以推荐一个好的脚本来使用吗 这是代码 div
  • 我可以防止将 Leaflet 地图平移到世界边缘之外吗?

    有没有办法限制平移到世界边缘之外 在这幅画中 棕色是世界 灰色是虚空 我想让它不可能像这样平移 Leaflet 允许您控制地图抵抗被拖出边界的程度maxBoundsViscosity选项 值 0 到 1 将其设置为最大值会完全禁用拖动出界

随机推荐

  • Matplotlib 投影去除边距

    这是一张美国县的图像 创建于 ax plt axes projection ccrs LambertConformal ax set extent 120 70 20 50 ccrs Geodetic 在 实时 图中可以看到plt show
  • 如何获取 django ORM 中某个字段的所有值?

    我有一张桌子叫user info 我想获取所有用户的姓名 所以表中有一个字段叫做name 所以在 sql 中我做了类似的事情 SELECT distinct name from user info 但我不知道如何在 django 中做同样的
  • 如何从服务访问应用程序参数?

    从我的控制器中 我访问应用程序参数 位于 app config with this gt container gt getParameter my param 但我不知道如何从服务访问它 我想我的服务类不应该扩展Symfony Bundle
  • 在 MacOS 中生成 .Net Core Soap Webservices 代理

    我看过一个 C 教程 其中讲师使用以下命令生成代理 添加参考 但他使用的是Windows电脑 我正在使用 Mac 并且正在努力使用相同的方法生成 Web 服务的代理 它使用以下命令生成文件 系统 Web 服务 Net Core 中不存在的包
  • 如何在 Blazor 中创建良好的自定义 DropDownList / ComboBox 项?

    我想在我的 Blazor Server App 上使用多个 ComboBox Styled Items 我的工作代码如下所示 page dropdownlist h3 DropDownList ComboBox h3
  • 在 C 中动态初始化字符串数组

    我知道我可以这样初始化字符串数组 static const char BIN ELEMENTS 5 0000 0 0 0001 0 1 0010 0 2 0011 0 3 0100 0 4 但我需要以动态的方式实现这一点 从文件中读取字符
  • 每年熊猫高效分组季节

    我有一个多年时间序列 想要确定 95 的数据所在的界限 我想按一年中的季节 DJF MAM JJA SON 查看此内容 我尝试过以下操作 import pandas as pd import numpy as np FRAC 2 TAIL
  • Android WebView 硬件加速键盘故障

    当 WebView 进行硬件加速时 单击输入字段会导致键盘出现 并且 html 会重新绘制 移动并复制一段时间 1 当软键盘出现时 WebView 将其内容平移到左下角 然后再次平移到正常位置 导致短暂的可见重复 2 更改键盘时 例如 ab
  • 在delphi中获取互联网时间

    我想从互联网获取时间和日期 我用了下面的代码 IdDayTime1 ReadTimeout 5000 IdDayTime1 Host www time windows com IdDayTime1 Port 37 Label1 Captio
  • 指向任意类型(或任何其他模板类)的 std::vector 的指针

    假设我想要一个指向 std vector 的指针的成员变量 但我不想指定它存储的变量类型 我只想访问那些独立于其实际泛型类型的函数 这可以用c 实现吗 像这样的东西 class Foo public void setVec std vect
  • 我应该从 main() 返回 EXIT_SUCCESS 还是 0?

    这是一个简单的问题 但我不断看到相互矛盾的答案 C 程序的主例程是否应该返回0 or EXIT SUCCESS include
  • 如果订单中的产品属于 WooCommerce 中的某个类别,如何自动创建帐户

    我有一家 WooCommerce 商店 顾客以客人身份结账 我现在想出售一些虚拟产品 在这种情况下我想自动创建一个帐户 所以我有两个工作代码片段 用于检查购物车中的产品是否属于特定类别 在线 一种是从客人结账时自动创建帐户 但我不知道如何将
  • QML 加载并显示具有颜色属性的 .ply 网格

    我正在尝试使用 QML 从斯坦福 PLY 文件加载一个带有每个顶点颜色信息的简单立方体 我的实体看起来像这样 Entity id circle property Material materialPoint Material effect
  • 谷歌地图API地理定位+雷达地点搜索

    我正在尝试使用谷歌地图 API 中的地理位置和地点来显示地图 在我的位置 以及我周围最近的地点 这两个示例单独工作 但不能一起工作 谁能告诉我为什么会有问题 我是否用另一个地图覆盖了地图或做其他错误的事情
  • 预处理使用 keras 函数 ImageDataGenerator() 生成的图像来训练 resnet50 模型

    我正在尝试训练 resnet50 模型来解决图像分类问题 在我拥有的图像数据集上训练模型之前 我已经加载了 imagenet 预训练权重 我正在使用 keras 函数 flow from directory 从目录加载图像 train da
  • 无法访问 webrtc 上的后置摄像头 [chrome:54]

    我正在使用 webrtc 和 Threejs 尝试 webAR 演示 同时通过我的 Android 手机 chrome 54 访问相机 前置摄像头默认打开 我检查并尝试通过参考有关堆栈溢出的所有问题来解决该问题 甚至尝试更改数组值但没有成功
  • C++:使用 longjmp 和 setjmp 安全吗?

    在 linux gcc 上的 C 中使用 longjmp 和 setjmp 是否安全 异常处理 我没有使用longjmp setjmp实现异常处理 我想知道longjmp setjmp会对标准异常处理产生什么副作用 this pointer
  • 如何使用 matplotlib 绘制一维高斯混合模型的 pdf

    我想绘制高斯混合模型 下面的代码允许我绘制两个单独的高斯曲线 但是在它们相交的地方 线条非常尖锐并且不够平滑 有没有办法绘制一维 GMM 的 pdf def plot data mu 6 5 var 2 3 sigma np sqrt va
  • Animationend 事件未在 :after 元素上触发

    我在 after 元素上设置了一个动画 并在animationend 事件上设置了一个事件处理程序 但是 animationend 事件在 IE10 IE11 中永远不会触发 document ready function var test
  • PhantomJS 节点 - page.open - 无法跟踪多个页面

    我在用着幻影节点将节点与 PhantomJS 接口 我正在尝试并行打开页面 但问题是page open回调函数不会传回对页面的引用 因此我无法知道哪个页面已完成 相关代码 self queue j page open call self q