在 PhantomJS 上我不能包含 jQuery,如果没有 jQuery,我就无法发布表单数据

2023-11-23

我在 PhantomJS 中运行 jQuery 时遇到问题。我已经发现this答案,其中谈到评估函数内部没有可用的变量,但问题是关于节点模块,在我的示例中我只调用console.log内部评估函数。我已经把这个问题放在GitHub 也有.

以前,对于某些页面,以下内容evaluate代码没有执行。现在 @b1f56gd4 已经提供了一些帮助,它现在打印消息;我无法执行它,但现在我可以看到:

页面位于https://login.yahoo.com/运行不安全的内容http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js.

我无法从不同的域加载 jQuery--local-to-remote-url-access=true or --web-security=false选项没有区别。

我将尝试在本地加载 jQuery。这是代码:

console.log('Loading a web page');
var url = 'https://login.yahoo.com/'; 
var page = require('webpage').create();
console.log('Setting error handling');
page.onConsoleMessage = function (msg) {
    console.log(msg);
};
page.onError = function (msg, trace) {
    console.log(msg);
    trace.forEach(function(item) {
        console.log('  ', item.file, ':', item.line);
    })
    phantom.exit();
}
console.log('Error handling is set');
console.log('Opening page');
page.open(url, function (status) {
    if (status != 'success') {
        console.log('F-' + status);
    } else {
        console.log('S-' + status); 
        //-------------------------------------------------     
        var jsLoc = '';
        jsLoc = 'jquery.min.js'; // to load local
        //jsLoc = 'http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js'; // to load remote
        var func = function(pg){
            console.log('Function called');
            console.log('Page evaluating');
            console.log(pg);
            pg.evaluate(function() {
                console.log('Page evaluate started');               
                //---
                var loginVar = '[email protected]';
                var pwdVar = 'itsmypass_445f4hd564hd56f46s'; 
                //---
                $("#login_form #username").value = loginVar;
                $("#login_form #passwd").value = pwdVar;
                //---
            });
            console.log('Rendering');
            pg.render('ystsA.png');
            console.log('Rendered');
        }
        if (typeof jQuery == 'undefined') {  
            console.log('JQuery Loading');  // <<<<==== Execute only until here
            console.log('Source:['+jsLoc+']');
            var rs = page.includeJs(jsLoc, function()  // <<<<===== Fail here, jsLoc was changed to load locally and after tried remotely, i tried use page.injectJs but fail too
            { 
                console.log('JQuery Loaded');  // <<<< ===== Never reach here, no matter if loading local or remote script in include above
                func(page); 
            });
            page.render('ystsB.png');
        } else {
            console.log('JQuery Already Loaded');
            func(page);
            page.render('ystsC.png');
        }
        //-------------------------------------------------
    }
    phantom.exit();
});

阅读 @g4d564w56 答案后,我在没有 JQuery 的情况下完成了所有操作,然后我可以填充文本框,但无法单击按钮在登录表单上发布。
查看新代码:

console.log('Loading a web page');
var url = 'https://login.yahoo.com/'; 
var page = require('webpage').create();
console.log('Setting error handling');
page.onConsoleMessage = function (msg) {
    console.log(msg);
};
page.onError = function (msg, trace) {
    console.log(msg);
    trace.forEach(function(item) {
        console.log('  ', item.file, ':', item.line);
    })
    phantom.exit();
}
console.log('Error handling is set');
console.log('Opening page');
page.open(url, function (status) {
    if (status != 'success') {
        console.log('F-' + status);
    } else {
        console.log('S-' + status); 
        //-------------------------------------------------     
        var jsLoc = '';
        jsLoc = 'jquery.min.js'; // to load local
        //jsLoc = 'http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js'; // to load remote      
        var act01 = function(pg){
            console.log('Function called');
            console.log('Page evaluating');
            console.log(pg);
            pg.evaluate(function() {
                var getElmById = function(id){
                    return document.getElementById(id);
                }           
                console.log('Page evaluate started');               
               //---
                var loginVar = '[email protected]';
                var pwdVar = 'itsmypass_445f4hd564hd56f46s'; 
                //---
                getElmById("username").value = loginVar;
                getElmById("passwd").value = pwdVar;
                getElmById("login_form").submit(); /// <<<<==== now its dont work !!!
                //---
            });
            console.log('Rendering');
            pg.render('ystsA.png');
            console.log('Rendered');
        }
        act01(page);
        //-------------------------------------------------
    }
    phantom.exit();
});

我知道这个问题大约一年前就已经得到了回答,但答案并没有真正解决这个问题。错误原因如下:

“该页面位于https://login.yahoo.com/运行不安全的内容http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js."

登录页面是 https 页面,并且您正在尝试加载 http 资源。如果您将网址更改为https://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js这个错误将会消失。花了一段时间才弄清楚。

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

在 PhantomJS 上我不能包含 jQuery,如果没有 jQuery,我就无法发布表单数据 的相关文章

  • Ajax文件上传

    我想使用 Ajax 和 php 上传文件 我有一个表格
  • 如何从 JavaScript 中的字符串中删除空白字符?

    如何从 JavaScript 中的字符串中删除空白字符 修剪很容易 但我不知道如何将它们从inside字符串 例如 222 334 gt 222334 您可以使用正则表达式 如下所示来替换所有空格 var oldString 222 334
  • libxmljs 的替代品 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 目标 使用 Node js 访问网页 使用 xpath 语法操作 DOM 并打印新的 DOM libxm
  • 从 php 到 JavaScript 的数组

    我正在尝试使用 json 将数组列表从 php 传输到 javascript 但它不起作用 JS ajax url getProfilePhotos php type post post or get method data if you
  • Crypto-Js 库的 hmac-256 脚本返回函数结构而不是 Google Apps 脚本中的值,在外部工作正常吗?

    我正在设置一个谷歌电子表格项目来连接到我的 CryptoExchange API 但是当涉及到这个简单的 CryptoJs Hmac sha256 脚本时 它不起作用 它返回函数结构而不是值 而在外部它工作正常 看我的jsfiddle ht
  • 如何在bootstrap中默认隐藏侧边栏?

    我在这里有一个很好的参考 作为 Bootstrap 在设计 Web 表单应用程序时的侧边栏 http startbootstrap com template overviews simple sidebar http startbootst
  • JavaScript - 无需布尔值即可运行一次

    有没有办法只运行一段JavaScript代码ONCE 而不使用布尔标志变量来记住它是否已经运行过 具体来说not就像是 var alreadyRan false function runOnce if alreadyRan return a
  • 如何使用 JavaScript 选择预节点/块中的文本?

    我了解不允许 JS 将任意文本复制到剪贴板背后的安全原因 但是是否有一种方法可以通过单击按钮来选择预节点中的文本 类似于 select 函数在输入中的工作方式 我不是在寻找复制到剪贴板的 jQuery 插件 我只想突出显示预块中的文本 以便
  • Sequelize - 使用 es6 和模块运行迁移

    我不确定我是否做错了什么或者什么 我觉得我正在运行一个现代的 相当常见的堆栈 但我无法让新的 Sequelize v6 与我的设置完美配合 我在 Node v14 17 Sequelize v6 6 2 上 在我的 package json
  • 在动态创建的元素上添加事件监听器[重复]

    这个问题在这里已经有答案了 是否可以向所有动态生成的元素添加事件侦听器 Javascript 我不是页面的所有者 因此我无法以静态方式添加侦听器 对于页面加载时创建的所有元素 我使用 doc body addEventListener cl
  • 在 setInterval / setTimeout 中使用变量作为时间[重复]

    这个问题在这里已经有答案了 这是一个示例情况 var count time 1000 setInterval function count 1 time 上面的代码会将 count 变量加 1 即 1000 毫秒 看来 setInterva
  • React 应用程序中的 addEventListener 不起作用

    一些背景 我正在尝试消费自定义网络组件在 React 应用程序中并尝试监听来自 Web 组件的事件 我相信您不能只在自定义 Web 组件上以通常的反应方式处理事件 i e
  • 限制 Dropzone 仅上传特定类型的文件

    我正在使用 Dropzone 上传文件 这是我的代码 div div
  • window.open:是否可以打开一个新窗口并修改其 DOM

    我想打开一个新窗口 var my window open iframe html blank height 600 width 600 但当我打开它时 我想修改它的DOM 我尝试过 var div my document createEle
  • 如何知道浏览器空闲时间?

    如何跟踪浏览器空闲时间 我用的是IE8 我没有使用任何会话管理 也不想在服务器端处理它 这是纯 JavaScript 方法来跟踪空闲时间 并在达到一定限制时执行一些操作 var IDLE TIMEOUT 60 seconds var idl
  • JavaScript 中的实时摩尔斯电码转换器

    在看到谷歌关于莫尔斯电码 gmail 的愚人节笑话后 我想我应该尝试用 javascript 创建一个实时莫尔斯电码转换器 我正在使用正则表达式和替换将莫尔斯电码更改为字符 例如 replace g a replace g r 我遇到的问题
  • Aurelia - 仅 HTML 自定义元素的内联定义

    我的 Aurelia 视图模型中有一个递归对象 如下所示 Class BottomlessPit Name string MorePits BottomlessPit null 因此 我想在 Aurelia 视图中使用递归模板 它只会在一个
  • Outlook 加载项,无法读取未定义的属性“BeginRequestEventArgs”

    我使用 Visual Studio 开发了 Outlook 插件 我的插件有一个按钮 用于填充会议邀请正文中的详细信息并添加所需的与会者 这在 99 的情况下都有效 但是 时不时地它会给我下面的 JavaScript 错误 Uncaught
  • Javascript 中 if 语句中的假值?

    过去两周 我在学校研究 JavaScript 的事情已经有一段时间了 而且我一直在做我的作业 在 Douglas Crockford 所著的 JavaScript The Good Parts 一书中 作者在第 11 页上列出了 if 语句
  • JQuery 删除和内存泄漏

    我正在开发一个游戏 我看到了很多内存消耗 我使用jquery animate 动画完成后 我 remove 元素 我的问题是 从 dom 树中删除一个元素后 对象还存在记忆中吗 Javascript 是一种垃圾收集语言 这意味着当没有代码保

随机推荐

  • Tomcat Java Servlet - 在应用程序启动时初始化类

    我有一个类需要一些时间来启动 进行一些 JNI 调用以及其他调用 因此每次加载页面时初始化此类是不可行的 是否可以在应用程序启动时初始化此类 然后在提供页面时访问其方法 例如 我有我的班级 当应用程序 tomcat 启动时 我希望它初始化
  • 退出 HttpClient 会话

    如何退出 HttpClient 会话 我使用以下代码使用 Apache HttpClient 登录到应用程序 public HttpClient loginToHexgen String username String password H
  • UML 类图:如何对调用方法或启动活动或服务的关系进行建模

    我正在创建我的第一个 Android 应用程序 我避免标记与用户或系统交互的关联 例如 我标记了starts反而单击时开始 我已经标记了starts反而检测开始时 然而读完之后this 我正在考虑改变starts协会由 gt 依赖关系 我很
  • CSS 居中内容的适当方法

    我更喜欢使用基于 CSS 的设计 但作为后端编码人员 我的 CSS 技能有点弱 当我涉及布局时 我倾向于依靠基于表格的格式 因为我的思想已经被多年来基于表格的滥用所扭曲 有一个特别的问题我总是被绊倒 最好的 CSS 替代品是什么 table
  • 保护 Rails 登台环境的密码

    我正在尝试找出保护我的暂存环境的最佳方法是什么 目前我在同一台服务器上运行登台和生产 我能想到的两个选择是 使用 Rails 摘要身份验证 我可以把这样的东西放在 application controller rb 中 Password p
  • 使用 Opencv 模糊矩形中的内容

    在下面的矩形函数中 绘制矩形 Draw the predicted bounding box void drawPred int classId float conf int left int top int right int botto
  • 删除void指针是否保证删除正确的大小? [复制]

    这个问题在这里已经有答案了 可能的重复 删除空指针安全吗 说我有一个new分配给一个名为MyClass分配很简单 MyClass myClassPtr new MyClass 我存储了对列表的引用void 我简单地说 myListOfPoi
  • Pandas Dataframe 添加标头而不替换当前标头

    如何向 DF 添加标头而不替换当前标头 换句话说 我只想将当前标题向下移动并将其作为另一条记录添加到数据帧中 第二个问题 如何将表 示例数据框 添加到 stackoverflow 问题中 我有这个 注意标题以及如何将其添加为一行 0 213
  • 无法加载“RealmSwift”的底层模块

    我正在尝试通过 Cocoapods 安装 Realm for Swift 首先我做的是pod init进入我的项目然后我打开 podfile 并将其更改如下 target Taskio do use frameworks pod Realm
  • 如何防止在 VBA 中触发 ActiveX 事件?

    我正在寻找一种更好的方法来禁用 ActiveX 事件在 Excel 工作簿中触发 尽管这适用于所有具有 ActiveX 对象的 Office 应用程序 希望类似的东西Application EnableEvents false 尽管这不适用
  • 使用百分比和最大宽度将图像裁剪为正方形

    工作响应式网站 所以我不能使用设置的宽度 我需要将图片全部裁剪为正方形 我无法定义精确的测量值 因为它还需要有max width 100 为了使其成为响应式图像 它可以相对于容器 相对于浏览器的宽度 调整其大小 我见过很多建议使用的解决方案
  • 给定一个整数数组,找到具有最大乘积的相邻元素对并返回该乘积

    给定一个整数数组 找到具有最大乘积的相邻元素对并返回该乘积 这是我的代码 function adjacentElementsProduct inputArray var arr inputArray var x 0 var y 0 var
  • 使用 xmllint 获取 pom.xml 版本

    我有一个pom xml as such
  • Spring Data MongoDB 中 @MongoId 相对于 @Id 有什么用?

    我正在尝试将模型添加到 Mongodb 中 我知道我可以使用 Id 来避免在 id 字段中创建 ObjectId 现在 在使用这个时 我遇到了 MongoIdorg springframework data mongodb core map
  • 使用“read var”的“错误变量名”

    我对 Linux shell 感到困惑 作为一名 Linux 菜鸟 我可能会监督一些显而易见的事情 我想要的只是运行以下脚本 bin bash echo Type some Text read var echo You entered va
  • devise - 自定义用户编辑页面

    目前 devise Rails 3 有一个一页用户编辑页面 users edit 我想将其分成几个部分以获得更好的用户界面 例如 account settings account password account notices accou
  • 通过 jQuery getScript 函数添加的调试脚本

    我有一个通过 jQuery 动态添加脚本引用的页面 getScript功能 脚本加载并执行得很好 所以我知道引用是正确的 但是 当我向任何脚本添加 调试器 语句以允许我在调试器 例如 VS Net Firebug 等 中单步调试代码时 它不
  • AngularJS 导航在 tinymce 指令后不起作用

    我有一个我无法弄清楚的问题 但我确实有一个提示 在集成 TinyMCE 之前 主导航工作正常 例如链接 设置 分析 设置 如果您单击它们 它现在不起作用 这是我的js文件 var app htmleditor module angular
  • 导入错误:没有名为“util”的模块

    当我尝试导入模块时illustris python我收到错误 导入错误 没有名为 util 的模块 该模块util位于模块下面的目录中snapshot py需要它 所以我很困惑为什么Python看到一个模块 而不是另一个 我在下面包含了导入
  • 在 PhantomJS 上我不能包含 jQuery,如果没有 jQuery,我就无法发布表单数据

    我在 PhantomJS 中运行 jQuery 时遇到问题 我已经发现this答案 其中谈到评估函数内部没有可用的变量 但问题是关于节点模块 在我的示例中我只调用console log内部评估函数 我已经把这个问题放在GitHub 也有 以