【问题标题】:Run Javascript custom function in PhantomJS在 PhantomJS 中运行 Javascript 自定义函数
【发布时间】:2015-11-04 14:42:42
【问题描述】:

我正在编写一个控制台应用程序,我在其中使用 Nreco.PhantomJS 来加载数据。这是一个包含带有标记的谷歌地图的网站的报废应用程序。我试图获取的数据在完全加载之前或之后在页面上不可用。数据是从 JavaScript 函数传递到谷歌地图的简单纬度和经度,并且不会在页面上呈现。由于我对 PhantomJS 很陌生,所以我不确定如何实现这一点,但我相信这是可以做到的。这段小脚本是我用c#代码运行的,

try
{
    string jsContent = "var system = require('system');" +
    "var page = require('webpage').create();" +
    "page.open('" + url + "', function(status) {" +

        "system.stdout.writeLine(GetLatLang());" +
    "}"+

    "phantom.exit();" +
    "});";

    phantomJS.RunScript(jsContent, null, null, ms);
}
finally
{
    phantomJS.Abort(); // ensure that phantomjs.exe is stopped
}

当我在控制台选项卡(谷歌浏览器检查器内部)中调用 Alert(GetLatLang()) 函数时,它运行良好并检索到值。但是 PhantomJS 永远不会完成运行代码,我必须关闭应用程序。我的理解是,在上面的代码中,PhantomJS 立即尝试执行 GetLatLang() 函数,而当时它不可用。页面完全加载后有什么方法可以执行这个功能吗?

【问题讨论】:

    标签: javascript c# phantomjs


    【解决方案1】:

    您需要在页面上下文而不是幻像上下文中调用GetLatLang() 函数:

    "page.open('" + url + "', function(status) {" +
        "console.log(page.evaluate(function(){" +
            "return GetLatLang();" +
        "}));" +
    "}"+
    

    page.evaluate() 是唯一提供对 DOM 和页面的 window 对象的访问的函数。


    此外,您的 JavaScript 存在语法错误。只有一个打开{,但两个关闭}。您需要删除"}"+

    【讨论】:

    • 感谢您的指导。您指出的 javascript 错误是由于我删除了一些不必要的行以使代码更易于理解。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-16
    • 2022-06-11
    • 2020-08-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多