将 PhantomJS 调用中的变量暴露给injectJS

2024-05-14

我已经按照从入门页面注入 jQuery 的示例进行操作,效果很好。我在同一目录中有一个 jQuery 的本地副本,并执行类似的操作...

if(page.injectJs('jquery.min.js')) {
  page.evaluate(function(){
    //Use jQuery or $ 
  }
}

当我尝试注入自己的脚本时,没有任何功能可供我使用。假设我有一个名为 myScript.js 的脚本,其中包含

function doSomething() {
  // doing something...
}

然后我不能使用 doSomething 之类的...

if(page.injectJs('myScript.js')) {
  console.log('myScript injected... I think');
  page.evaluate(function() {
    doSomething();
  });
} else { 
  console.log('Failed to inject myScript'); 
}

我试过了

window.doSomething = function() {};

and

document.doSomething = function() {};

以及没有运气,以及尝试在后续的 page.evaluate() 中使用 window.doSomething() 或 document.doSomething() 来调用它们。


以下对我有用,也许您的应用程序逻辑的其他部分是错误的:

inject.coffee

page = require('webpage').create()

page.onConsoleMessage = (msg) -> console.log msg

page.open "http://www.phantomjs.org", (status) ->
  if status is "success"
    page.includeJs "http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js", ->
      if page.injectJs "do.js"
        page.evaluate ->
          title = echoAndReturnTitle('hello')
          console.log title
        phantom.exit()

do.coffee:

window.echoAndReturnTitle = (arg) ->
  console.log "echoing '#{arg}'"
  console.log $(".explanation").text()
  return document.title

Result:

> phantomjs inject.coffee
echoing 'hello'

            PhantomJS is a headless WebKit with JavaScript API.
            It has fast and native support for various web standards: 
            DOM handling, CSS selector, JSON, Canvas, and SVG.
            PhantomJS is created by Ariya Hidayat.

PhantomJS: Headless WebKit with JavaScript API

或者如果您更喜欢 JavaScript(它们是自动生成的并且有点难看):

`注入.js':

// Generated by CoffeeScript 1.3.1
(function() {
  var page;

  page = require('webpage').create();

  page.onConsoleMessage = function(msg) {
    return console.log(msg);
  };

  page.open("http://www.phantomjs.org", function(status) {
    if (status === "success") {
      return page.includeJs("http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js", function() {
        if (page.injectJs("do.js")) {
          page.evaluate(function() {
            var title;
            title = echoAndReturnTitle('hello');
            return console.log(title);
          });
          return phantom.exit();
        }
      });
    }
  });

}).call(this);

do.js:

// Generated by CoffeeScript 1.3.1
(function() {

  window.echoAndReturnTitle = function(arg) {
    console.log("echoing '" + arg + "'");
    console.log($(".explanation").text());
    return document.title;
  };

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

将 PhantomJS 调用中的变量暴露给injectJS 的相关文章

  • PhantomJS 不支持 Javascript 国际化 API

    我有一系列Jasmine针对运行的测试AngularJs使用 ECMAScript 国际化 API 的服务 当我通过 Chrome 运行它们时 它们都运行成功 但是 当我使用PhantomJS通过 Maven 运行它们 它们看起来都失败了P
  • 通过 Karma 运行时如何调试 PhantomJS

    我通过 Jasmine Karma 和各种浏览器进行测试 我目前正在调试一个仅在 PhantomJS 中失败的测试 我想调试这个调用 所以我在 karma 中设置了一个自定义 PhantomJS 启动器 它在调试端口打开的情况下运行它 我可
  • Puppeteer、cloudflare 网站返回 403(禁止)

    我正在尝试从 cloudflare 网站上抓取数据 但无论我做什么 我都会收到 403 禁止错误 我读到这是因为无头请求 有什么办法可以绕过这个吗 我将在下面保留我当前的设置 我还能做些什么来防止被发现吗 const puppeteer r
  • PhantomJS 和 iFrame

    我正在使用 phantomjs 1 5 和casperjs http casperjs org 用于我的功能测试 casper require casper create loadImages false casper start http
  • PhantomJS 使用 QtWebKit 还是 Blink?

    PhantomJS CasperJS 是否使用 WebKit 或 Chromium 作为默认浏览器驱动程序 如果是WebKit 是直接WebKit还是qt或者gtk PhantomJS 基于 QtWebKit 常见问题解答说 问 Phant
  • Karma、PhantomJS 和 es6 Promise

    我正在编写一个使用新的 es6 Promise 的 JavaScript 库 我可以在 Firefox 中测试该库 因为 Promise 已定义 但是 当我尝试使用 Karma 和 PhantomJS 测试我的代码时 出现错误Can t f
  • 解析 phantomjs 中的 post 数据

    I am working with the POSTMAN extension to chrome and am trying to send a post request to phantomjs I have managed to se
  • 如何从 PhantomJS 或 grover 跳过代码执行

    接下来的问题是 我的应用程序中有 JavaScript 代码 我想跳过 隐藏 PhantomJS 和 grover 检查 执行中的一些代码 So 如何跳过 隐藏 PhantomJS 或 grover 的代码执行 注意 当我编写 JavaSc
  • PhantomJS 多个页面的意外加载行为

    我有一个脚本 如下 可以通过 3 个步骤来抓取网站 当设置为一次最多一页时效果很好 然而 当我将其增加到一次 2 个时 事情开始变得不稳定 onFinished 的触发时间比我预期的要早 并且页面尚未完全加载 因此 我的脚本的其余部分被破坏
  • 在 Phantomjs + selenium 中启用 cookies

    我想登录amazons3 网址 https console aws amazon com iam home security credential https console aws amazon com iam home security
  • 添加适用于 Firefox Webdriver 但不适用于 PhantomJS 的 Cookie

    我有一个带有饼干的泡菜 是通过以下命令创建的 def doLogin driver do login stuff pickle dump driver get cookies open cookies pkl wb 我有获取 cookie
  • PhantomJS 在评估之前更改网页内容

    我想在评估 渲染网页之前删除 HTML 元素或简单地删除网页的前 N 个字符 有什么办法可以做到这一点吗 这取决于多种场景 我将仅概述以下问题的每种答案组合的步骤 是不是有一段JS叫做onload ol 或者脚本块立即被评估 ie 它是内联
  • 尝试在节点集群后面扩展时 phantomjs-node 崩溃

    相关 GitHub 问题 https github com sgentle phantomjs node issues 280 https github com sgentle phantomjs node issues 280 我有一个简
  • 对登录 Instagram 的 PhantomJS 代码进行故障排除

    我编写了这个 PhantomJS 脚本来自动登录 Instagram 它可以成功填写表单字段并按提交按钮 但它总是被重定向回登录屏幕并显示以下消息 你的用户名或密码不正确 我 100 确信凭据是正确的 并且我用多个 Instagram 帐户
  • 在 Play 框架规范中设置 PhantomJSDriver 上的 Accept-Language

    如何使用 Play Framework 2 2 规范中的特定 Accept Language 语言标头配置 PhantomJSDriver 鉴于此代码 import org specs2 mutable import org specs2
  • 如何在 Node.js 中将 HTML 转换为图像

    我需要在 Node 服务器上将 HTML 模板转换为图像 服务器将以字符串形式接收 HTML 我尝试过 PhantomJS 使用一个名为 Webshot 的库 但它不能很好地与 Flex 框和现代 CSS 配合使用 我尝试使用 Chrome
  • 如何在 NodeJS 中使用 PhantomJS 模拟鼠标悬停或在页面上运行 JS 功能

    NodeJS PhantomJS 使用 Cheerio 进行内容解析 需要解析包含动态加载的div 提示 的网页 该事件可以在许多表 td 上 这是一个示例 当我将鼠标悬停在特定的 td 上时 我看到这个带有数据的橙色块 它动态加载了函数
  • 如何设置黄瓜环境变量

    我有以下 package json name newcucumber version 1 0 0 main index js scripts test node modules bin cucumber js firefox node mo
  • Casperjs 和无法使用 captureSelector 保存屏幕截图

    我有这样的代码 casper thenOpen url function this echo Opening at width give some time for the page to load casper waitFor funct
  • 在 PhantomJS/CasperJS 中设置屏幕尺寸

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

随机推荐