【问题标题】:Run javascript on HTML generated from C# string在从 C# 字符串生成的 HTML 上运行 javascript
【发布时间】:2018-02-08 09:09:21
【问题描述】:

我想在从 C# 字符串生成的 HTML 上运行 javascript。 (无需打开浏览器 - 只需 C# 代码)

类似:

string myHTML = '<div id="divTest">This is test<br/><br/></div>';

Javascript 应该是:

function test 
{
     return document.getElementById('divTest').offsetHeight;
}

我已经尝试过检查一些无头浏览器,如 PhantomJS 和 Optimus - 但它们没有呈现字符串的选项(只能通过http://google.com/ 等网址打开网页。有没有办法实现这是通过 C# 实现的吗?

【问题讨论】:

  • 您是否将字符串 myHTML 附加到您的页面 HTML 中。这应该可以从任何浏览器访问。
  • 如果html作为html放在dom中,应该是可以访问的
  • 这还不完全清楚。您想在 HTML 字符串上运行 javascript,并获取元素的高度......在浏览器之外,即在命令行工具等中?
  • 我已经编辑了问题 - 当然没有打开浏览器。
  • 但他们没有渲染字符串的选项 - 你这是什么意思?

标签: javascript c# html


【解决方案1】:

以下内容对我有用:

string html = "<html><head></head><body><div id=\"divTest\">This is test<br/><br/></div></body></html>";

string script1 = "return document.getElementById('divTest').innerText";
string script2 = "return document.getElementById('divTest').offsetHeight";

var options = new PhantomJSOptions();
options.AddAdditionalCapability("javascriptEnabled", true);

var driver = new PhantomJSDriver(options);
driver.Url = "file://dummy.html";
driver.Navigate();
driver.ExecutePhantomJS("document.write('" + html + "');");

var test1 = driver.ExecutePhantomJS(script1);
//Returns: This is a test
var test2 = driver.ExecutePhantomJS(script2);
//Returns: 40

您需要安装 Selenium.WebDriver NuGet 并从 http://phantomjs.org/download.html 下载 PhantomJS exe,它需要与您的 exe 位于同一文件夹或 PATH 中。

【讨论】:

  • 我想在不打开浏览器的情况下运行 javascript。只是 C# 代码。
  • 你有这方面的例子吗?还是链接?
  • 我添加了一个示例,我自己还没有测试过,但应该可以工作,或者至少让你朝着正确的方向前进 ;-)
  • 我设法通过一些调整使其工作,我编辑了答案。
  • 您的解决方案很好。我唯一不知道的是如何在 MVC 中为驱动程序设置全局变量?我想打开 PhantomJSDriver 并保持打开状态(因为这比打开快得多 - 每次都关闭)。在windows应用里做这个没问题,但是MVC呢?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-12
  • 2011-05-07
  • 1970-01-01
  • 1970-01-01
  • 2018-07-08
相关资源
最近更新 更多