【问题标题】:Can't load html from local file in PhantomJS无法从 PhantomJS 中的本地文件加载 html
【发布时间】:2015-04-09 15:30:03
【问题描述】:

使用 Selenium 和 PhantomJS,我可以从运行在 localhost 上的服务器加载文件,如下所示:

_driver.Url = "http://localhost:52873/Home/Template";

其中_driverRemoteWebDriver 的一个实例,它连接到在端口上运行的PhantomJS 实例(使用--webdriver=9134 启动)。我可以像这样调用该 HTML 文件中定义的 Javascript 函数:

var val = _driver.ExecuteScript("myFunction()");

但是,我想从本地文件系统而不是通过本地网络服务器加载它,所以我尝试了这样的操作:

_driver.Url = "file://c:/path/to/Home/template.html";

我没有收到任何错误,但是当我尝试执行html 文件中定义的脚本时,它不起作用。它会抛出一个InvalidOperationException 和消息Can't find variable: myFunction。但是,如果我将 _driver 设置为 ChromeDriver 的实例,我可以看到页面加载并且一切都按预期工作,两者都使用 httpfile 协议。

我没有从 PhantomJS 控制台窗口中获得任何其他信息,所以我真的不知道问题出在哪里。我怀疑出于某种原因 PhantomJS 只是没有加载页面。有什么想法吗?

另外,有什么方法可以使用 selenium 的 .NET 绑定来访问控制台日志?我在我的 html 文件中添加了一个 console.log("connected"),以便在页面加载后立即运行,但是当从 filehttp 运行时,它不会回显到 phantomJS 控制台,所以这没什么帮助。

【问题讨论】:

  • html 是否包含对远程资源的引用?如果是,您可能需要在运行 PhantomJS 服务器时设置--local-to-remote-url-access=true
  • @ArtjomB.:它包括其他文件的相对路径,这些文件也是本地文件。像<script src="../../Scripts/jquery.min.js"></script> 这样的东西。我只是偶然尝试了--local-to-remote-url-access,但似乎没有帮助。
  • 作为调试步骤,我会尝试使用ProcessMonitor 来确定 PhantomJS 访问这些文件是否存在权限问题。
  • Arrrgh:没关系,问题是我需要file:/// 而不是file://。 Chrome 自动插入了额外的/,而 Phantom 没有。我注意到我在 Chrome 上运行它时比较了地址栏中的实际 URL,并注意到了差异。

标签: c# selenium phantomjs


【解决方案1】:

看起来您在路径 URI 中缺少一个额外的 /。

_driver.Url = "file:///c:/path/to/Home/template.html";

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-27
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 2021-08-30
    • 2017-07-31
    相关资源
    最近更新 更多