在phantom.js中同步page.evaluate

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在phantom.js中同步page.evaluate相关的知识,希望对你有一定的参考价值。

我有两个page.evaluate函数,我该如何同步?我可以将函数作为参数传递给page.evaluate吗?我的功能有两个参数:selectortextNode。将没有args的函数传递给page.evaluate正在工作(如下面的代码片段所示),但我需要将参数传递给函数...我不知道该怎么做。

var page = require('webpage').create();
page.open('https://web.telegram.org/#/login', function(status) {
  console.log(status)
  if (status !== 'success') {
    console.log('Unable to access network');
  } else {
    page.evaluate(function(){
      document.querySelector("input[ng-model='credentials.phone_country']").value = ''
      document.querySelector("input[ng-model='credentials.phone_country']").click();
    })
    var keyNodes = '380';
    var keyNodeArr = keyNodes.split('');
    console.log(keyNodeArr)
    for(var i = 0; i < keyNodeArr.length; ++i){
      page.sendEvent('keypress', page.event.key[keyNodeArr[i]], null, null, null);
    }
    page.evaluate(function(){
      document.querySelector("input[ng-model='credentials.phone_number']").value = ''
      document.querySelector("input[ng-model='credentials.phone_number']").click();
    })
    keyNodes = '631091144';
    var keyNodeArr = keyNodes.split('');
    console.log(keyNodeArr)
    for(var i = 0; i < keyNodeArr.length; ++i){
      page.sendEvent('keypress', page.event.key[keyNodeArr[i]], null, null, null);
    }


    console.log("aa")
    page.render('github.png');
  }
  //phantom.exit();
});
答案

通过使用闭包我的意思是这(参见mySelectormyValue):

var page = require('webpage').create();
page.open('https://web.telegram.org/#/login', function(status) {
  console.log(status)
  if (status !== 'success') {
    console.log('Unable to access network');
  } else {
    // get these from response or from whatever other source
    var mySelector = "input[ng-model='credentials.phone_country']";
    var myValue = '';

    page.evaluate(function(){
      document.querySelector(mySelector).value = myValue;
      document.querySelector(mySelector).click();
    })
    var keyNodes = '380';
    var keyNodeArr = keyNodes.split('');
    console.log(keyNodeArr)
    for(var i = 0; i < keyNodeArr.length; ++i){
      page.sendEvent('keypress', page.event.key[keyNodeArr[i]], null, null, null);
    }
    page.evaluate(function(){
      document.querySelector(mySelector).value = myValue;
      document.querySelector(mySelector).click();
      // or use variables with other names
      // if you need them to be different from the first ones
    })
    keyNodes = '631091144';
    var keyNodeArr = keyNodes.split('');
    console.log(keyNodeArr)
    for(var i = 0; i < keyNodeArr.length; ++i){
      page.sendEvent('keypress', page.event.key[keyNodeArr[i]], null, null, null);
    }


    console.log("aa")
    page.render('github.png');
  }
  //phantom.exit();
});

以上是关于在phantom.js中同步page.evaluate的主要内容,如果未能解决你的问题,请参考以下文章

尝试在laravel 5.1 mac上安装php phantom js时,Composer安装错误

使用 phantom js 打印 PDF - @page 规则不起作用

使用nodejs从模板生成PDF的最佳方法

如何使用 .HAR 文件生成 HTML UI(Firebug 节目)

Confluence 6 从外部目录中同步数据配置同步间隔

同步和异步的概念