在 PhantomJS 中使用 C# 启用 JavaScript

本文关键字:启用 JavaScript PhantomJS | 更新日期: 2023-09-27 18:31:04

我在C#应用程序中使用了PhantomJS,即使属性PhantomJSDriver.Capabilities.IsJavaScriptEnabled为真,它也没有执行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>

我用过PhantomJSDriversrc 显示"No Javascript!"

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

在 PhantomJS 中使用 C# 启用 JavaScript

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

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

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

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

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

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

查看页面使用的实际状态

phantomDriver.GetScreenshot();