让 phantomjs、socket.io 和 gevent-socketio 协同工作

2023-11-29

我正在尝试构建一个利用 Phantomjs 1.7(模拟浏览器)的应用程序,并创建一个 Python 后端来启动一些事件并收集数据。

问题是 Phantomjs 和我的 Python 程序这两个进程需要双向通信。问题是里面page.evaluate我不能:

  • 传递任何复杂的对象,例如“fs”(从标准输入读取)
  • 创建一个 WebSocket 连接到我的 Python 脚本
  • 任何其他形式的进程间通信都受到限制

所以我的解决方案很简单:

  • 将socket.io js注入我正在查看的页面中。
  • 连接到我的 python 服务器,该服务器是使用 gevent-socketio 实现的

当我尝试从 page.evaluate 内部连接时,我得到:

Unexpected response code: 404

这是 Phantomjs 脚本:

var page   = require("webpage").create();
page.onAlert = function(msg) { console.log("alert>>>" + msg); };
page.onConsoleMessage= function(msg) { console.log(msg); };

page.open("http://google.com", function() {
  page.injectJs("socket.io.js");
  page.evaluate(function() {
    var socket = new io.Socket();
    socket.connect('localhost:5051/test');
    socket.on('connect',function() {
      console.log('Client has connected to the server!');
    });
    // Add a connect listener
    socket.on('signal',function(data) {
      console.log('Received a signal: ',data);
    });
    // Add a disconnect listener
    socket.on('disconnect',function() {
      console.log('The client has disconnected!');
    });
    // Sends a message to the server via sockets
    socket.send("kakalq");
  });
    //phantom.exit();
});

这是服务器端 Python 脚本:

from socketio import socketio_manage
from socketio.server import SocketIOServer
from socketio.namespace import BaseNamespace

class MyNs(BaseNamespace):
  def initialize(self):
    print "connected"
    self.emit('connect')

  def disconnect(self, *args, **kwargs):
    print "diconnecting"
    super(MyNs, self).disconnect(*args, **kwargs)

 def signal(self, message):
   print "received signal", message
   self.emit("okay", "this will be sent to js")

 def start(environ, start_response):
   if environ['PATH_INFO'].startswith('/test'):
     return socketio_manage(environ, { '/test': MyNs })


if __name__ == "__main__":
  server = SocketIOServer( ('', 5051), start,policy_server=False )
  server.serve_forever()

我猜测它不起作用的原因是 PhantomJS 仅支持旧的、已弃用的 WebSockets 版本。我们必须等待几个月 PhantomJS 2.0 才能支持当前版本的 WebSockets。

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

让 phantomjs、socket.io 和 gevent-socketio 协同工作 的相关文章

  • Mojolicious:我应该使用一个还是多个 websocket?

    我正在自学 Mojolicious 和 websockets 到目前为止 我已经有了一个网页 它显示数据库中的行 并具有用于添加 删除和更新行以及选择用于排序的列的按钮 目前 它在每个按钮的 javascript onclick 处理程序中
  • 使用express/connect-redis在页面重新加载时抓取现有会话

    使用 connect express 和 socket io 我试图让我的应用程序在重新连接时获取会话详细信息 我的会话显然在客户端连接时工作 但如果我刷新浏览器上的页面 它会忘记所有内容 我的会话cookie肯定是一样的 所以不是那样的
  • 在 PhantomJS/CasperJS 中设置屏幕尺寸

    我正在自动访问网站以从中收集数据 不幸的是 该页面会检测屏幕尺寸 如果屏幕太小 则不会给我所需的页面 从非交互式上下文 IIS Web 应用程序 运行脚本时 Screen 对象似乎返回 1024x768 像素的大小 即使我将视口大小设置为
  • Nginx 和 Flask-socketio Websockets:存在但没有消息传递?

    我在让 Nginx 与 Python Flask socketio 库 基于 gevent 很好地配合时遇到了一些麻烦 目前 由于我们正在积极开发 我正在尝试让 Nginx 充当代理 对于发送页面 我可以通过直接运行flask socket
  • YouTube 视频出现 Phantom JS 错误

    Phantom JS 版本 1 9 1 恶作剧版本 1 3 0 从今天开始 YouTube 嵌入视频在运行 javascript 测试时会出现 poltergeist 错误 我的 YouTube 代码只是默认的嵌入 YouTube 代码 这
  • 如何使用socket.io发送图像文件(二进制数据)?

    我无法从以下位置发送数据Android Client to NodeJS Server I use Socket IO 客户端 https github com socketio socket io client java我的客户端中的ja
  • 流媒体性能 - Canvas 与

    我正在开发一个应用程序 需要通过 webSocket 连接以每秒至少 30 帧的速度持续传输图像 我遇到了一些性能问题 并希望尽我所能进行优化 我想知道使用不断更新的图像之间的性能差异是什么 就像这样 img src someDynamic
  • 哪些浏览器支持 HTML5 WebSocket API?

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 我将开发一个在浏览器中运行的即时消息应用程序 哪些浏览器支持WebSocket API
  • 如何使用 CasperJS 登录网站?

    如何通过提交表单来登录 CasperJS 我搜索了谷歌 但没有找到任何好的例子 您将需要使用 Casperfill http docs casperjs org en latest modules casper html fill功能 下面
  • 防止 NGINX 中的一个 WebSocket 连接泛滥?

    我使用这个配置来防止我的服务器上出现类似 DOS 的洪水 limit req zone binary remote addr zone one 10m rate 10r s limit req zone binary remote addr
  • 节点socket.io,有什么可以防止洪水吗?

    我怎样才能阻止某人简单地做 while true client emit i am spammer true 当有人想要让我的节点服务器崩溃时 这肯定会成为一个问题 就像 tsrurzl 说的 你需要实施一个速率限制器 https en w
  • 是否可以同时读取和写入 java.net.Socket?

    是否可以同时从套接字读取和写入 我有一个连续读取套接字的线程 由于只有一个线程正在从套接字读取数据 因此读取操作是线程安全的 现在我有很多线程 比如100 写入套接字 因此 很明显 我必须通过这样做来使写操作线程安全 package com
  • 覆盖 Autobahn/Twisted WebsocketClientProtocol 类

    我想重写我的 WebSocketClientFactory 类以允许传入数据填充作业队列 这是我正在尝试的连接代码 factory WebSocketClientFactory ws localhost 7096 job queue Que
  • C 代码中的握手 WebSocket

    我是 html5 及其 websocket 的新手 现在我一直在尝试用 c 制作自己的 websocket 服务器但是 这对我来说很难 我只想从 C 服务器发送 hello world 到 html 客户端 但是 我在握手方面遇到了麻烦 o
  • 保持 WebSocket 连接处于活动状态

    我正在研究 WebSocket 协议 并尝试在后端使用 Python 实现一个简单的 ECHO 服务 它似乎工作正常 但连接建立后立即断开 这是我的客户
  • express.io VS express + socket.io 有什么用处?

    我在这里发现了 socket io 和聊天示例 https github com rauchg chat example blob master index js https github com rauchg chat example b
  • 如何使用 Web 套接字和 Angular CLI 设置代理

    我有一个使用 Angular CLI 构建的简单 Web 应用程序 我希望它使用网络套接字与后端通信 我已经编写了后端 并使用一个简单的 index html 页面进行了测试 服务器可以在套接字上发送和接收该页面 在我的 angular c
  • 使用端口 80 的 AWS Elastic Beanstalk 上的 WebSocket 问题

    我正在将一个 node js 应用程序从 Heroku 迁移到在端口 80 上使用 WebSocket 的 AWS Elastic Beanstalk WebSocket 在 AWS Elastic Beanstalk 上返回 301 错误
  • 如何销毁角度工厂实例

    一方面 我有几个工厂 每个工厂都控制一个 websocket 另一方面 其中一个工厂应该在客户端登录时启动 因此 if user isLogged injector get NotificationsWebsocket 这就是我动态初始化工
  • socket.io 的良好初学者教程? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi

随机推荐

  • 编译sdk应该低于目标sdk

    对 SO 的压倒性建议是编译 SDK 通常应该与目标 SDK 匹配 https stackoverflow com a 27629181 360211 同样 建议将此 compileSdk 与您的目标 sdk 版本相匹配 https sta
  • 如何从不受支持的国家/地区销售付费应用程序[关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 我想出售我开发的应用程序 但我的国家 罗马尼亚 不支持此服务 因此 我想请一位住在可以销售付费应用程序的国家 法国或美国 的朋友帮助我 现在我不知道该怎么告诉他这个过程 他身边需要什
  • 捕获地理位置错误 - 异步等待

    如何捕获特定于地理位置的错误以通知用户他们必须打开地理定位 catch 记录了一个名为位置误差正如 Mozilla 文档中所引用的 https developer mozilla org en US docs Web API Positio
  • 在 Android M 上请求麦克风权限

    我需要在 Android M 中使用麦克风 我尝试在清单中设置权限组 但无法使其正常工作 这是我在清单中得到的内容
  • 将 iPhone 应用程序与 Shibboleth 集成

    有人将 iPhone 应用程序与 Shibboleth 身份提供商集成吗 谷歌搜索没有得到任何结果 所以我直接询问大师 如果以前没有这样做过 这样做是否可行 两者的答案都是 是 我是一名 Java 人员 所以两周前被问到 学习 Object
  • 温莎城堡如何响应实现多个接口的类?

    例如 我有两个接口 ICustomerService 和 IOrderService 每个接口都有几个函数 例如 GetCustomer GetOrder 等 我想要一个类来实现这两个接口 Server 温莎城堡对此有何回应 首先有可能吗
  • 合并 XmlNodelist

    任何人都可以给我一个将 xmlNodelists 合并到单个列表的解决方案吗 我会使用 LINQ Concat方法 问题是XmlNodeList is IEnumerable相对于IEnumerable lt XmlNode gt 因此你必
  • 解释GDB寄存器(SSE寄存器)

    我已经使用 GDB 1 天了 我对它有了一定的了解 但是 当我使用 GDB 和打印寄存器在最后一个分号处设置断点时 我无法完全解释存储到 XMM 寄存器中的数据的含义 我不知道数据是否采用 MSB gt LSB 格式 反之亦然 m128i
  • R 中向量的子向量之和

    给定一个向量x长度为 k 我想获得一个 k x k 矩阵X where X i j 是x i x j 我现在的做法是 set seed 1 x lt rnorm 10 X lt matrix 0 10 10 for i in 1 10 fo
  • 程序集版本是否可以随每个 TFS 2010 版本自动更新?

    我正在使用 Visual Studio 2010 和 TFS 2010 有没有办法让 dll 版本随着每个 TFS 版本自动递增 Thanks 我有一篇关于如何在 TFS Build 2010 中对程序集进行版本控制的博客文章 如何为 TF
  • 递归与yield返回树中的元素顺序

    我有一个递归函数 在给定起始根节点的情况下返回所有子树节点 private IEnumerable
  • Google App Engine 中可以进行长轮询吗?

    我需要制作需要经常轮询服务器的应用程序 但GAE对请求有限制 因此发出大量请求可能会非常昂贵 是否可以使用长轮询并使请求等待最多 30 秒的更改 Google AppEngine 有一个新功能 Channel API 您可以使用它 A构建良
  • 有人成功调试 iPhone 的单元测试吗?

    我找到了例子如何在 Cocoa 中调试单元测试 or the ADC 页面在这里 但我无法让调试适用于 iPhone 应用程序目标 我可以启动并运行测试 并且它们在构建期间运行 但我需要的是debug一些更复杂的故障的测试 您可能会考虑将测
  • 如何将数据注入到从路由器创建的 Angular2 组件中?

    我目前正在尝试为我们的 Angular1 应用程序 相当复杂的一个 构建 Angular2 原型 基于 alpha44 并且我正在尝试在使用路由和子路由时找到最佳的模型 数据架构 在我的示例中 从从路由创建的子组件中 我想访问父组件的属性
  • 管理许多 git 存储库

    在 git 中设置项目很容易 因此即使对于小脚本 我也可以拥有单独的存储库 现在的问题是如何管理它们 我在多个地方使用这些存储库工作 当我对某些存储库进行更改后 我希望能够更新其他位置的存储库 所以我有一个目录 里面有很多存储库 我怎样才能
  • 如何通过TabBars调用Activity

    我正在制作一个使用选项卡栏的应用程序 现在我需要知道的是 如何通过打开其他选项卡setOnTabChangedListener 在我的代码中 例如 我当前位于选项卡中 当我单击第二个选项卡时 它应该调用第二个选项卡的活动 看下面的代码 Ta
  • 从安全性中删除时间戳元素

    所有的极客都会说 WSE 已经过时了 现在对我来说没关系 只是想找到解决我问题的方法 尝试使用 WSE 使用 Java Web 服务 在传出的soap请求中有一个安全有附加时间戳的节点 我的待发肥皂请求如下所示
  • 动态使用时,波形符不会转换为绝对路径

    我想动态创建 3 张卡片 每张卡都有一个图像 我想为每张卡动态设置路径 但我不能使用波形符 因为波浪号不会转换为绝对路径 img 我收到此错误 GET http localhost 3000 assets images how to use
  • 按给定索引对多维数组进行排序 - PHP?

    我有两个数组 days order and mysql result 我要排序 mysql result数组使用 days order大批 我想以天数升序显示 MySQL 结果 有什么办法可以做到这一点或任何其他方式 以便我可以通过 day
  • 让 phantomjs、socket.io 和 gevent-socketio 协同工作

    我正在尝试构建一个利用 Phantomjs 1 7 模拟浏览器 的应用程序 并创建一个 Python 后端来启动一些事件并收集数据 问题是 Phantomjs 和我的 Python 程序这两个进程需要双向通信 问题是里面page evalu