我需要查询网页中的每个img标记,并以其呈现的形式查找其高度和宽度。不是实际的物理图像尺寸。我需要在WinForm应用程序中使用C#执行此操作。
实施例: http://motherboard.vice.com/read/i-built-a-botnet-that-could-destroy-spotify-with-fake-listens
主要图像的物理尺寸为3648x2736。当浏览器最大化时,渲染图像为1000x750。我知道媒体查询和由于它们调整图像大小。这个img标签没有宽度和高度属性。 如何让我的应用程序使用C#获得1000x750大小并假设最大媒体查询大小和至少1400宽度的分辨率。
我假设我需要一个浏览器控件,如Awesomium,CefSharp,EO.Browser或IE Web浏览器控件?不确定哪一个可以做到这一点。我想迭代img标签并获取每个渲染的尺寸,就好像我打开浏览器并使用开发工具来获取每个图像的计算尺寸。我更喜欢在C#中使用Javascript进行此处理。
答案 0 :(得分:1)
我一直在使用Selenium WebDriver进行测试,我认为它现在是最好的选择
我做了一点测试,它按预期工作,这是测试代码
[TestFixture]
public class TestClass
{
private FirefoxDriver _driver;
[SetUp]
public void Setup()
{
_driver = new FirefoxDriver();
_driver.Url = "http://motherboard.vice.com/read/i-built-a-botnet-that-could-destroy-spotify-with-fake-listens";
}
[TearDown]
public void TearDown()
{
_driver.Quit();
}
[TestCase()]
public void TestImage()
{
IWebElement element = _driver.FindElementByXPath("//img[@class = 'vmp-image' and position() = 1]");
Assert.IsNotNull(element);
string width = element.GetCssValue("width");
string height = element.GetCssValue("height");
Console.WriteLine("width: " + width);
Console.WriteLine("height: " + height);
}
}
在此测试中Selenium WebDriver
打开Firefox,您可以看到网站加载,加载后您可以访问网站的DOM,即使您可以执行Javascript代码,通过XPath查找元素, Css,ClassName,TagName等......
另外请记住,这是一个浏览器,你应该最大化或给窗口的浏览器一个特定的大小,因为该网站可能是移动友好的,所以你可以得到不同的图像大小
您还可以使用Chrome和InternetExplorer here is the documentation