在phantomjs上使用谷歌翻译

时间:2014-02-28 10:33:15

标签: javascript html phantomjs

我碰巧写了一个程序来使用google翻译(http://www.translate.google.com) 使用PhantomJS。

但是我无法在textarea中插入文本。我搜索了很多,但没有任何证据有用。但是我能够打印结果内容。 这是我的代码:

var page = require('webpage').create();
page.open("http://translate.google.com", function(status) {
if ( status === "success" ) {
        console.log(status);
    page.includeJs("//ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js", function() { 
   var c=page.evaluate(function(){$('source').val("sample text");
   return  $('#source').text();
});

var f= page.evaluate(function() {     
    $('#source').val("sbjbsdfsdfbbs");          
            return $('#source').text();
        });
console.log(f);//should print input  text
var result= page.evaluate(function() {     
    $('#source').val("sbjbsdfsdfbbs");          
            return $('#result_box').text();
        });
console.log(result);
    phantom.exit()
  });
}
});

2 个答案:

答案 0 :(得分:0)

尝试在打开页面时将文字和语言附加到网址: 'http://translate.google.com/#en/es/translate这个'

var page = require('webpage').create();
var inputText = 'translate this';
var langFrom = 'en';
var langTo = 'es';
var pageURL = 'http://translate.google.com/#' + langFrom + '/' + langTo + '/' + inputText;

page.open(pageURL, function(status) {
    // your code to get results here
});

答案 1 :(得分:0)

你走了:

translate.js:

#!/usr/bin/env phantomjs

var system = require('system');
var text = system.stdin.read();
var sourceLang="en";
var targetLang="pt_BR";
var url = "https://translate.google.com/#"+sourceLang+"/"+targetLang;

var page = require('webpage').create();
page.settings.userAgent = 'Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:13.0) Gecko/20100101 Firefox/13.0';

page.onError = function(msg, trace) {
    var msgStack = ['ERROR: ' + msg];
    if (trace && trace.length) {
        msgStack.push('TRACE:');
        trace.forEach(function(t) {
            msgStack.push(' -> ' + t.file + ': ' + t.line + (t.function ? ' (in function "' + t.function + '")' : ''));
        });
    }
    // uncomment to log into the console 
    // console.error(msgStack.join('\n'));
};

page.onConsoleMessage = function (msg) {
        if ( msg == "phanthom.exit()" ) {
                phantom.exit();
        } else {
          system.stdout.write(msg);
          system.stdout.flush();
        }
        page.render("test.png");
};

/*
 * This function wraps WebPage.evaluate, and offers the possibility to pass
 * parameters into the webpage function. The PhantomJS issue is here:
 * 
 *   http://code.google.com/p/phantomjs/issues/detail?id=132
 * 
 * This is from comment #43.
 */
function evaluate(page, func) {
    var args = [].slice.call(arguments, 2);
    var fn = "function() { return (" + func.toString() + ").apply(this, " + JSON.stringify(args) + ");}";
    return page.evaluate(fn);
}

page.open(url, function (status) {
        if (status !== 'success') {
                console.log('Unable to access network');
        } else {
                var result = evaluate(page, function(text){
                        var getResult=function(){
                                var result_box=document.querySelector("#result_box");
                                var input_box=document.querySelector("#source");
                                if ( input_box == null )
                                        setTimeout( getResult, 1000 );
                                else {
                                        input_box.value=text;
                                        if ( result_box == null || result_box.innerText == "" ) {
                                                setTimeout( getResult, 1000 );
                                        } else {
                                                console.log(result_box.innerText);
                                                console.log("phanthom.exit()")
                                        }
                                }
                        }
                        getResult();
                }, text );
        }
});

...

$ echo "phantomjs, is a fantastic tool" | phantomjs translate.js | iconv --from cp1252

PhantomJS, é uma ferramenta fantástica