我在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;
}
}
答案 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();