使用c#代码我们如何捕获VSTS网站的屏幕截图

时间:2016-12-03 13:29:44

标签: tfs screenshot

我们有Visual Studio Team Services(VSTS)站点。我们需要使用c#代码截取页面上特定区域的屏幕截图。试图获取页面的html内容。但即使我们提供适当的证书,也无法这样做。

需要帮助使用c#代码(特定区域)

获取VSTS网站的屏幕截图

我使用下面的代码尝试获取页面的html内容。 (因此,一旦我获得了html内容,我就可以将其转换为图像)。

WebRequest request = WebRequest.Create("google.com"); WebResponse response = request.GetResponse(); 
Stream data = response.GetResponseStream();
string html = String.Empty; 

using (StreamReader sr = new StreamReader(data)) 
{ html = sr.ReadToEnd(); }

如果我将网址作为Google或任何其他网址提供,那么它工作正常但是如果我提供VSTS网站网址即使有凭据也无法正常工作

1 个答案:

答案 0 :(得分:0)

不确定为什么需要从C#代码中捕获VSTS的屏幕截图。但您遇到的问题可能是由代码中的身份验证引起的。当您从第三方工具或代码向VSTS进行身份验证时,您需要从" VSTS Web门户/安全/备用身份验证凭据启用备用凭据"并使用备用凭据进行身份验证。因此,请将您的代码更新到下面,然后重试:

            string altusername = "xxx";
            string altpassword = "xxx";
            WebRequest request = WebRequest.Create("https://xxx.visualstudio.com/xxx/xxx");
            string auth = altusername + ":" + altpassword;
            auth = Convert.ToBase64String(Encoding.Default.GetBytes(auth));
            request.Headers["Authorization"] = "Basic" + auth;

            WebResponse response = request.GetResponse();
            Stream data = response.GetResponseStream();
            string html = String.Empty;

            using (StreamReader sr = new StreamReader(data))
            { html = sr.ReadToEnd(); }

另一件事是,即使您可以成功验证VSTS,您仍可能遇到其他问题,因为VSTS的响应比Google更复杂。我建议您使用一些Web自动化测试工具(如Selenium)来实现您想要的功能。

以下代码也适用于我:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

    private void button1_Click(object sender, EventArgs e)
    {
        string altusername = "xxx";
        string altpassword = "xxx";
        string url = "https://xxx.visualstudio.com/_git/Python";
        string auth = altusername + ":" + altpassword;
        auth = Convert.ToBase64String(Encoding.Default.GetBytes(auth));
        string header = "Authorization: Basic " + auth;
        webBrowser1.Navigate(url, null,null,header);
        Timer tim = new Timer();
        tim.Tick += new EventHandler(timer_Tick); 
        tim.Interval = (1000) * (30);             // Adjust the time base on the time you need to load the webpage
        tim.Enabled = true;                       
        tim.Start();                              
    }
    void timer_Tick(object sender, EventArgs e)
    {
        Bitmap bmp = new Bitmap(webBrowser1.Width, webBrowser1.Height);
        Rectangle rect = new Rectangle(0, 0, bmp.Width, bmp.Height);
        webBrowser1.DrawToBitmap(bmp, rect);
        bmp.Save("D:\\Code\\0a.bmp");
    }
}