C#调用chrome获取页面html内容
我要抓一个网页的源代码,页面是分页的,页数比较多,用C#的httprequest模拟浏览器请求,屏蔽的比较厉害,用webbrowser或iframe就直接打不开了,已经尝...
我要抓一个网页的源代码,页面是分页的,页数比较多,用C#的httprequest 模拟浏览器请求,屏蔽的比较厉害,用webbrowser或iframe就直接打不开了,已经尝试各种办法,现在就用浏览器打开可以正常获取到页面html内容,但是页数很多,所以有没有办法可以让C# 调用chrome获取页面的html
展开
2个回答
展开全部
这个功能用在浏览器中用js就能完成,而且更方便。代码如下:
function crawl(baseUrl, pageStart, pageEnd){
for(var i = pageStart; i <= pageEnd; i++){
var xhr = new XMLHttpRequest();
xhr.open("get", baseUrl + i);
xhr.onload = function(page) {
return function(){
console.log("第" + page + "页内容如下:");
console.log(xhr.responseText);
//TODO : 这里你可以发送ajax请求把数据保存到你的服务器端,前提是你服务器端要设置跨域响应头:Access-Control-Allow-Origin
}
}(i);
xhr.send();
}
}
使用方法,打开你要的网站,在chrome的控制台下执行,crawl("你的页面地址?page参数=", 1, 3)
追问
返回undefined
追答
你把要抓的页面url给我,我帮你试试,发图片,要不可能被度娘给吃了
展开全部
cefsharp其实也难获取完整,我讲实话,你看我写的:
//例如下面这个结构
//<small class="test-name ncss-brand text-color-white u-uppercase d-sm-ib va-sm-m" aria-label="Options for 张三">张三</small>
//我们获取登录名是张三怎么获取
//取中间值,没办法他没解析html的语法
public static string GetMiddleString(string SumString, string LeftString, string RightString)
{
if (string.IsNullOrEmpty(SumString)) return "";
if (string.IsNullOrEmpty(LeftString)) return "";
if (string.IsNullOrEmpty(RightString)) return "";
int LeftIndex = SumString.IndexOf(LeftString);
if (LeftIndex == -1) return "";
LeftIndex = LeftIndex + LeftString.Length;
int RightIndex = SumString.IndexOf(RightString, LeftIndex);
if (RightIndex == -1) return "";
return SumString.Substring(LeftIndex, RightIndex - LeftIndex);
}
//这是方法体
void get_info()
{
var stm = chromeB.GetSourceAsync().Result;
string str = GetMiddleString(stm, "test-name ncss-brand text-color-white u-uppercase d-sm-ib va-sm-m", "small>");
string st2 = GetMiddleString(str, ">", "<");
}
//写在结束加载语句里面
chromeB.FrameLoadEnd += (object sen, FrameLoadEndEventArgs ed) =>
{
if(bl==true)get_info();
};
这种方法不灵,为什么end事件想要获取到最终html还要看他执行效果,有时候你发现点击都搞定了,网站也响应了,但是最终获取不到登录名,主要原因是他自身还没完全加载或者加载线程拥堵,没有获取完整。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询