我们有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网站网址即使有凭据也无法正常工作
答案 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");
}
}