PhantomJS 打开一页又一页

2023-12-23

我使用此示例创建了 phantomjs 代码来登录网站。

var page = require('webpage').create();
page.open("http://www.facebook.com/login.php", function(status) {

  if (status === "success") {
    page.onConsoleMessage = function(msg, lineNum, sourceId) {
      console.log('CONSOLE: ' + msg + ' (from line #' + lineNum + ' in "' + sourceId + '")');
    };
    page.evaluate(function() {
      console.log('hello');
      document.getElementById("email").value = "email";
      document.getElementById("pass").value = "password";
      document.getElementById("u_0_1").click();
      // page is redirecting.
    });
    setTimeout(function() {
      page.evaluate(function() {
        console.log('haha');
      });
      page.render("page.png");
      phantom.exit();
    }, 5000);
  }
});

从这个链接。https://gist.github.com/ecin/2473860 https://gist.github.com/ecin/2473860

但我想从按钮打开另一个链接或直接进入它。我该怎么做?

这是一个更简单的例子。不起作用...

var page = require('webpage').create();
var url = "www.example.com";

page.open(url, function (status) {

    setTimeout(function () {
        page.evaluate(function () {
            console.log('haha');
        });
        page.render("example.png");
        phantom.exit();
    }, 5000);

});



var url = "www.google.com";

page.open(url, function (status) {

    setTimeout(function () {
        page.evaluate(function () {
            console.log('haha');
        });
        page.render("google.png");
        phantom.exit();
    }, 5000);

});

非常接近,现在将您的两个片段合并为一个。page.open()是异步的,这就是为什么您需要在第一个页面完成后才打开下一个页面:

var page = require('webpage').create();
var url = "http://www.example.com";

page.onConsoleMessage = function(msg, lineNum, sourceId) {
    console.log('CONSOLE: ' + msg + ' (from line #' + lineNum + ' in "' + sourceId + '")');
};

page.open(url, function (status) {
    page.onConsoleMessage = function(msg, lineNum, sourceId) {
        console.log('CONSOLE: ' + msg + ' (from line #' + lineNum + ' in "' + sourceId + '")');
    };
    page.evaluate(function() {
        document.getElementById("email").value = "email";
        document.getElementById("pass").value = "password";
        document.getElementById("u_0_1").click();
        // page is redirecting.
    });

    setTimeout(function () {
        page.evaluate(function () {
            console.log('haha');
        });
        page.render("example.png");


        var url = "http://www.google.com";

        page.open(url, function (status) {
            setTimeout(function () {
                page.evaluate(function () {
                    console.log('haha');
                });
                page.render("google.png");
                phantom.exit();
            }, 5000);
        });
    }, 5000);
});

为了真正看到console.log()代替page.evaluate()您需要注册到page.onConsoleMessage http://phantomjs.org/api/webpage/handler/on-console-message.html事件。还有更多其他事件在调试时很有帮助。

不要忘记将协议(http:// 或 file:///)添加到您要打开的 URL。 PhantomJS 在这方面有点挑剔。

而不是等待一段静态时间(setTimeout())直到您执行某些操作后加载下一页。您应该利用page.onLoadFinished事件。对于导航密集型脚本来说,这是相当麻烦的。使用CasperJS http://casperjs.org/对于更长的脚本。

很多时候Element.click()不起作用。这个问题 https://stackoverflow.com/questions/15739263/phantomjs-click-an-element对于这些情况有很多解决方案。

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

PhantomJS 打开一页又一页 的相关文章

  • jQuery:通过子项进行动画、连续循环

    接近但还没有完全实现 我想让第一个子 div 显示几秒钟 向下滑动 通过定位 并淡出视图 然后下一个子 div 向上滑动并淡入视图 连续重复 在显示最后一个子项后循环返回 看起来我已经让循环正常工作了 尽管计数似乎将子 div 堆叠在一起
  • 如何在 js.erb 中使用 Ruby 代码?

    我可以使用以下方式在模态中渲染部分内容escape javascript在js erb文件代码中 body append my modal modal show 但是 我似乎无法获得以下结果 console log ERB 将输出一个纯字符
  • 各种 Javascript 优化项目如何影响 DOM 性能?

    通过 Tracemonkey Squirrelfish 和 V8 项目 大量 C S 计算机科学融入了 Javascript 这些项目 或其他项目 是否解决了 DOM 操作的性能问题 或者它们纯粹与 Javascript 计算相关 纯 DO
  • 如何在 Jasmine JS 中重用 beforeEach/afterEach?

    当使用 JasmineJS 编写测试时 我有许多具有类似 beforeEach afterEach 代码的测试 有没有办法使用 JasmineJS 测试套件实现继承模型 我可以将所有测试分组为一个describe但在这种情况下 我将以包含所
  • 如何使用 html 标签包装 window.getSelection().getRangeAt(0) 中的文本选择?

    如何从 window getSelection getRangeAt 0 中进行选择并用 HTML 标签 例如 span 或 mark 包围它 我更喜欢直接的 javascript 或 jQuery 解决方案 我可以使用警报输出选定的文本
  • 如何捕获jquery中的任何点击事件[重复]

    这个问题在这里已经有答案了 我有一个按钮 当单击它时 会显示一个带有图像的 div 例如聊天的表情符号面板 如果我再次单击它 div 会隐藏 但我想要做的是 如果 div 已经显示 然后我单击页面的任何其他内容 我想隐藏它 我试过这个 my
  • 有效 JSON 上的 Firefox JSON“格式不正确”错误

    我在 Firefox 中收到以下错误消息 Error not well formed Source File http school courses booking add php 1287657494723 Line 1 Column 1
  • 将值传递给映射函数 - CouchDB

    我想知道是否可以将值传递给 couchDB 设计文档中的映射函数 例如 在下面的代码中 可以传递用户输入的值并使用该值来运行地图函数 也许我可以传递用户UserName当他们登录时 然后根据地图功能显示视图 function doc if
  • 在 Javascript 中隐藏按钮

    在我最新的程序中 有一个按钮 单击时会显示一些输入弹出框 这些框消失后 如何隐藏按钮 You can set its visibility财产 http www w3schools com cssref pr class visibilit
  • 通过标记或JS强制下载

    假设我在 CDN 来自 Rackspace 的云文件 上有一个文件 以及一个包含该文件链接的静态 html 页面 有什么方法可以强制下载此文件 以防止它在浏览器中打开 例如 mp3 我们可以让我们的服务器读取该文件并将相应的标头设置为 he
  • 将jQueryUI datepicker附加到div(显示位置错误)

    我在输入上使用 jQueryUI datepicker 默认情况下 jQueryUI 会附加 ui datepicker div to the body该文件的 有问题的输入位于屏幕上的 弹出 div 中 这意味着该 div 之外的任何点击
  • 如何在 Google 地图上旋转叠加图像?

    我正在尝试将一系列叠加层放置到 Google 地图上 我正在跟随地面覆盖层的示例代码 https developers google com maps documentation javascript examples groundover
  • JQuery mouseover 函数多次触发

    我很长时间以来一直使用这种方法来为整个类 按钮等 设置事件 div bigButton mouseover function this style backgroundColor dfdfdf 然而 在进行一些测试时 我刚刚注意到 当将鼠标
  • 提交外部有 INPUT 的表单,并修改值后

    我有一个form 有几个
  • 抓取 Shopee API v4

    我有一个最终项目 其中我想要检索的数据是通过在shopee上抓取数据来获取的 但是当我在隐藏的API上抓取shopee时遇到问题 当我在Insomnia脚本上尝试时 脚本会运行 但是当我尝试时在本地或 google colab 脚本上 这是
  • execCommand 的替代品

    我希望创建一个所见即所得编辑器 使用 jQuery 作为框架 我可以使用不同的方法来简化生产 我现在确实有一个正在工作的编辑 而且运作良好 我使用 iFrame 并将其设计模式设置为打开并从那里开始 然而 有一些事情困扰着我 以更改所选文本
  • Javascript - HTML Canvas 上的 Gecko 边框半径自适应(CSS border-radius)

    我试图弄清楚如何将 border radius css 属性的行为重现到 HTML 画布中 所以我已经在 J avascript 中做了一些事情 以便使用特定的半径 对于每个角 来计算给定形状的正确边界 如果需要的话 这是上一个问题 Gec
  • Javascript - 通过键获取特定 JSON 数组元素内的属性值

    我有一个像这样的 JSON 结构 map key1 valueA1 key2 valueA2 key3 valueA3 key1 valueB1 key2 valueB2 key3 valueB3 key1 valueC1 key2 val
  • 将json数据从servlet传递到jsp到js文件

    我得到了这个创建 JSON 数据的 servlet 我想将此数据传递到一个 jsp 页面 该页面应该通过 InfoVis 工具包显示数据 servlet java JSONObject json new JSONObject JSONArr
  • 在用户单击之前图像不会绘制在画布上?

    我使用执行类似以下操作的函数绘制几张图像 context drawImage img width 2 1 height 2 1 width height 我读过 我需要等待图像加载后才能绘制它 如下所示 img onload functio

随机推荐

  • typedef std 容器?

    我想做 typedef deque type error use of class template requires template argument list type
  • 编写 Z80 汇编程序 - 词法 ASM 并使用组合构建解析树?

    我对编写汇编器的概念非常陌生 即使在阅读了大量材料之后 我仍然很难理解几个概念 将源文件实际分解为令牌的过程是什么 我相信这个过程称为词法分析 我已经到处搜索有意义的真实代码示例 但我找不到如此简单的代码示例 非常受欢迎 解析时 信息是否需
  • MATLAB 中的复制求和运算符

    我正在尝试在 MATLAB 中对以下时间相关函数进行建模 其中 gamma beta 和 delta 是常数 我不确定进行求和的最佳方法是什么 我可以制作 u t 和 y t 函数句柄 但 symsum 只能用于符号 我唯一的选择是使用 f
  • 浮点差异取决于调试构建的运行方式

    我正在使用调试版本并在同一台计算机上获得不同的结果 无论我是否在调试器下运行 我正在使用优秀的 TestDriven Net 来运行单元测试 使用 TestDriven Net 或外部 NUnit 运行程序 运行 会产生相同的结果 使用 T
  • .NET 日志框架 [关闭]

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

    对于 REST Web 服务 我需要返回带时区的日期 无时间 显然不存在这样的东西ZonedDate在 Java 中 仅LocalDate and ZonedDateTime 所以我用的是ZonedDateTime作为后备 将这些日期转换为
  • 在 ASP 中上传到 IIS 5.1

    首先 我知道 XP 不太擅长托管 但由于该网站仅供我个人使用 而且我已经拥有 XP 许可证 这就是我正在使用的 我正在使用来自的纯asp上传脚本链接文本 http www asp101 com articles jacob scriptup
  • Ubuntu 中的 MySQL JDBC jar 文件在哪里?

    我已经通过安装 MySQL 5 5 32apt get install进入 Ubuntu 13 04 我想在 Java 项目中使用它 为此我必须有 MySql 连接器 jar 我找不到它 我尝试过locate mysql jar但它没有发现
  • Scalaz 中 \/ 的“ap”有什么作用?

    我正在看析取 https github com scalaz scalaz blob scalaz seven core src main scala scalaz Either scalascalaz 的类型和我注意到的方法ap Appl
  • 是否有可能在 SASS 中使用 CSS 变量?

    我有不同的树枝模板 应该用不同的颜色渲染 除了颜色主题之外 每个模板通过 SASS 的样式都是相同的 这就是为什么我想在每个模板中设置一个 CSS 变量 我认为 SASS 变量看起来像这样 pim color var color prima
  • 有流畅界面的经验吗?我需要你的意见!

    抱歉这个很长的问题 它被标记为维基百科 因为我要求的东西可能没有非常具体的答案 既然关了 那就这样吧 我的主要问题是 如何编写一个在基类中未完全定义的流畅接口 以便使用流畅接口的程序可以在现有结构中添加新单词 并且仍然保持一个引导界面 以便
  • 无法找到或加载主类 com.android.sdkmanager.Main

    I read these https stackoverflow com questions 4394584 android sdk install problem rq 1 还有这些 https stackoverflow com que
  • Maven:在一个阶段中将插件的多次执行与其他插件的执行交错

    我需要在预集成测试阶段执行以下操作 sql maven 插件 执行 jetty maven 插件 部署战争 sql maven 插件 执行 步骤 1 和 3 具有不同的配置 我尝试将 1 和 3 定义为单独的插件元素 但我相信 Maven
  • 如何使用更新的 api url 从同一组件调用 getServerSideProps?

    我想传递此函数中的参数 以便在应用某些过滤器时在同一页面上获取更新 过滤的数据 这对于初始渲染工作正常 但我无法从同一组件获取更新的数据 因为该 getServerSideProps 函数位于我的组件之外 我的组件 let API URL
  • 如何格式化 grep 输出以在行尾显示行号以及命中计数?

    我正在使用 grep 来匹配文件中的字符串 这是一个示例文件 example one example two null example three example four null grep i null myfile txt回报 exa
  • 无法获取多个php页面的登录用户信息

    我想获取多个页面中的用户信息 以便我可以根据多个页面中的登录用户显示和隐藏信息 代码 我可以在dashboard php中获取role id 但我在每个页面中渲染master php 并且我
  • jquery嵌套可排序列表

    我有这个代码 document ready function test list sortable items gt li handle handle axis y opacity 0 6 update function var order
  • UIKeyboardTypeNamePhonePad 类型的键盘可以在电话模式下启动吗?

    有没有办法让 UIKeyboardTypeNamePhonePad 类型的键盘以电话号码键盘模式而不是字母模式启动 键盘可以很好地满足我的需要 但我希望它以 其他 模式启动 因为这更有可能是用户输入的内容 我相信通过设置keyboardTy
  • 从 Google_Service_AnalyticsReporting (google/apiclient SDK) 切换到 BetaAnalyticsDataClient (google/analytics-data SDK)

    我正在将 Google Analytics 分析 媒体资源从 UA 切换到 GA4 并尝试使用数据 API 提取 GA4 媒体资源的 Google Analytics 分析 数据 我目前正在使用 google apiclient PHP S
  • PhantomJS 打开一页又一页

    我使用此示例创建了 phantomjs 代码来登录网站 var page require webpage create page open http www facebook com login php function status if