在PhantomJS中运行Javascript自定义函数

本文关键字:Javascript 自定义函数 运行 PhantomJS | 更新日期: 2023-09-27 18:20:28

我正在编写一个控制台应用程序,在其中我使用Nreco.ChantomJS加载数据。这是一个废弃的应用程序,适用于一个包含带有标记的谷歌地图的网站。我试图获得的数据在完全加载之前或之后都无法在页面上获得。数据是从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())函数(在谷歌chrome检查器内部)时,它会运行fines并检索值。然而,PhantomJS从未完成代码的运行,我不得不关闭应用程序。我的理解是,在上面的代码中,PhantomJS立即尝试执行GetLatLang()函数,而当时它不可用。有没有办法在页面完全加载后执行这个函数?

在PhantomJS中运行Javascript自定义函数

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

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

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


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