的WebRequest返回比浏览器的详细源>视图源(WebRequest returning

2019-10-29 21:07发布

我写在C#中的硒实用程序来帮助自动化测试。 我可能失去了一些东西完全明显,但为什么它,如果我发送的HttpWebRequest开了一个服务器并检索响应流,我结束了多源(硒即更可映射WebElements),比我拿到的时候我右点击 - 查看页面源在我的浏览器?

这意味着,我映射中硒司机找不到来运行的元素。

我如此混淆:S

HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
HttpWebResponse res = (HttpWebResponse)req.GetResponse();
StreamReader sr = new StreamReader(res.GetResponseStream());

var src = sr.ReadToEnd();

Answer 1:

有许多的可能性。 一个可能的罪魁祸首是在你向服务器发送的信息的差异。 浏览器通常发送各种头,饼干等,在Web请求没有,除非你明确地添加它。

例如,当我打www.google.com使用网络浏览器,我得到的东西,从谷歌加,我也得到了高档的体验,因为我对常绿浏览器。 大约139000个字符出现在我查看源代码页。

然而,当我做一个Web请求相同的URL(使用下面的代码),我只得到45000在响应流中的字符:

async void Main()
{
    var result = await GetTextAsync("https://www.google.com");
    Console.Write(result.Length);
}

public async Task<string> GetTextAsync(string url){
    var result = await WebRequest.Create(url).GetResponseAsync();
    using (var stream = result.GetResponseStream())
    using (var reader = new StreamReader(stream))
    {
        return await reader.ReadToEndAsync();
    }
}

我猜想,如果我设置的WebRequest发送所有相同的cookie和头Chrome浏览器在发送给谷歌,我的成绩会更相似。



文章来源: WebRequest returning more source than Browser > view source