【问题标题】:Not able to get result value from google translate using phantomjs无法使用 phantomjs 从谷歌翻译中获取结果值
【发布时间】:2014-03-04 07:57:02
【问题描述】:

这是我在程序中获取单词的谷歌翻译的代码。我使用 phantomjs 来实现这一点。

我将 "Word:asdasdasd" 传递到 ID 为 "source" 的文本区域并触发点击事件。之后尝试检查结果值是否包含在新创建的 span 标签下。为此我正在检查其 ID 为“result_box”的父级是否有多个子级。如果是这种情况,那么我们可以说一旦将值传递给 textarea,就会动态创建 span 标签。

var page = require('webpage').create();
console.log("Entering the program");
page.onConsoleMessage = function (msg) { 
    console.log(msg); 
};
page.open("http://translate.google.com", function(status) {
    if(status == 'success'){
        console.log("Page loaded "+ status);
        page.includeJs("//ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js", function() {
            setTimeout(function() {
                var data = page.evaluate(function() {
                    $('#source').val("asdasdasd");
                    var ev = document.createEvent("MouseEvents");
                    ev.initEvent("click", true, true);
                    document.querySelector("input[id='gt-submit']").dispatchEvent(ev);
                    console.log("Click on page ");
                                if( $('#result_box').children.length > 0 ){
                                    console.log("New Span included");
                                    console.log("value: " + $('#result_box').val());
                                }
                                else{
                                    console.log("No span");
                                }
                                });
                                console.log("Exiting the program");
                phantom.exit()
            }, 10000);
        });
    }
});

输出:

进入程序

页面加载成功

点击页面

包括新跨度

值:

退出程序


我的问题是它说创建了新的 span 标签,但我无法获取它的值。这很奇怪。上面的代码有什么问题?

请任何人指出解决方案。

提前致谢

更新

【问题讨论】:

  • value 主要用于inputsform elements。在这里您可以使用.text() 仅获取其中的文本而无需任何html 标记
  • 我试过.text()。它没有用。仍然返回空
  • 控制台有错误吗?
  • 控制台中没有错误。但是当我尝试从我的程序运行时它返回空。检查我更新的屏幕截图
  • 你试过 .html() 吗?那也显示为空?

标签: javascript jquery html phantomjs google-translate


【解决方案1】:

给@Neha加点,

这对我有用。

setTimeout(function(){                           
 console.log("After 5 sec value: " + document.getElementById('result_box').innerHTML);    
},5000);

【讨论】:

  • 嘿,我尝试将它包含在我的程序中。它不起作用。
  • 你删除了 phantom.exit()。因为在超时运行之前,程序可能会退出。
  • 是的,你是对的。它现在可以工作了。但是我现在如何退出程序?。一旦打印了值,我就无法退出 aft。我认为该变量不能全局访问。任何有什么想法?
  • 我得到了解决方案。我将它包裹在另一个超时函数下以退出程序。
  • 最好使用promise或者提供一个在超时完成时调用的回调,以便将退出与作业操作的结束同步。
猜你喜欢
  • 1970-01-01
  • 2019-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多