使用C#在PhantomJS中启用JavaScript

时间:2014-11-19 14:35:03

标签: javascript c# phantomjs

我在C#应用程序中使用了PhantomJS,即使属性PhantomJSDriver.Capabilities.IsJavaScriptEnabled为true,它也没有执行JavaScript。下面的简单页面仍然执行 noscript 标记的内容。如何让PhantomJS执行JavaScript?

我已经通过NuGet将Selenium和PhantomJS添加到我的VS2012解决方案中:

PM> Install-Package Selenium.WebDriver 
PM> Install-Package PhantomJS 

我创建了一个简单的HTML页面来演示未启用JavaScript:

<html>
  <body>
    <a href="javascript:GoToAnotherPage()">Go to another page</a>
    <noscript>
      No JavaScript!
    </noscript>
  </body>
</html>

我已经使用了 PhantomJSDriver src 显示&#34;没有Javascript!&#34;

public class Program
{
    public static void Main(string[] args)
    {
        var phantomDriver = new PhantomJSDriver();
        phantomDriver.Url = @"C:\page.html";
        var src = phantomDriver.PageSource;
    }
}

2 个答案:

答案 0 :(得分:3)

使用PhantomJS时默认启用JavaScript。事实上,我并不知道任何WebDriver默认情况下都会在没有JavaScript的情况下启动浏览器。

要确保启用了JavaScript,您可以检查

var phantomDriver = new PhantomJSDriver();
var enabled = phantomDriver.Capabilities.IsJavaScriptEnabled;

您还可以通过截屏并检查实际上未显示noscript块来实验性地检查JavaScript是否正在运行。因此,当您的案例中的屏幕截图(phantomDriver.GetScreenshot();)为空时,它就会起作用。

为PhantomJSDriver禁用JavaScript是一个坏主意,因为WebDriver协议的许多操作都是用JavaScript实现的。禁用JS会有效地禁用驱动程序。

答案 1 :(得分:2)

PageSource不应该执行JavaScript,它会获取浏览器最后加载的页面源,因此它包含HTML文件中的所有内容。

要查看页面的实际状态,请使用

phantomDriver.GetScreenshot();