在PhantomJS中运行Javascript自定义函数

时间:2015-11-04 14:42:42

标签: javascript c# phantomjs

我正在编写一个控制台应用程序,我在其中使用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()函数,而当时它不可用。页面完全加载后有没有办法执行这个功能?

1 个答案:

答案 0 :(得分:1)

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

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

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

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