如何以编程方式获取网页中图像的渲染尺寸?

时间:2016-01-07 03:38:39

标签: javascript c# .net winforms webbrowser-control

我需要查询网页中的每个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宽度的分辨率。

我假设我需要一个浏览器控件,如AwesomiumCefSharpEO.Browser或IE Web浏览器控件?不确定哪一个可以做到这一点。我想迭代img标签并获取每个渲染的尺寸,就好像我打开浏览器并使用开发工具来获取每个图像的计算尺寸。我更喜欢在C#中使用Javascript进行此处理。

1 个答案:

答案 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