C#:用WebBrowser获取JS动态加载以后的页面代码并保存图片

本文介绍如何使用C#的WebBrowser控件获取JS动态加载后的完整页面源码,并滚动页面使图片加载,然后保存图片到本地。通过分析网页结构,找到图片元素并滚动到其可视区域,避免频繁请求导致IP被封。利用剪贴板API实现图片的保存,需要注意剪贴板可能与其他应用冲突。该方法适用于处理大量图片加载的网页。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

很多网页的内容包括图片是用JS或Jquery动态加载的,用Webbrowser直接获得的源码是没有参考价值的,而JS加载后含所有element的代码很难获取的,起码笔者搜索了一圈下来看到的方法都几乎没有使用价值。

笔者这里分享一种解决方案,随便找个网页会动态加载内容的,不难发现需要加载的内容需要你滚动页面,视野范围内的内容就会动态加载,于是乎,办法就来了。

首先,你还必须先研究一下你需要抓取的网站的内容构造,比如笔者需要抓取的网页共有100张图片,并且需要页面滚动到图片位置这些图片才会加载。于是先用普通浏览器等加载完右击页面选检查,分析得到这些图片的class里面包含title,下面就可以根据这个来操作了。在webBrowser1_DocumentCompleted也就是加载完之后(注意并不是js也加载完),获取当前页面所有元素并存储在docall当中,然后开启Timer1。

private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
            currentEleIndex = 0;
            docAll = webBrowser1.Document.All;
            this.timer1.Enabled = true;
        }


在Timer1里面,根据上面的分析我们遍历所有元素,找到class包含title的图片元素并滚动到此元素,这时候js就会执行了,这里有一句scrollcount++ % 5 == 0来控制并不对每个图片都执行这个操作,因为页面图片太多,每个都执行一边没必要,这里设置每5个滚动一次,因为窗口可是范围一般都可以显示大于2行。这里有个要注意的,在页面滚动的时候会不断触发webBrowser1_DocumentCompleted事件。docAll和docAll.Count即元素总数也会不断改变。最后,在页面不再刷新的时候就可以执行后面的工作了,也就是这里 startprocess();所转向的函数。

        //webbrowser加载完后,要往下滚动来让js加载所有项目及图片
        //timer1隔一段时间滚动一下
        private void timer1_Tick(object sender, EventArgs e)
        {
            while (currentEleIndex < docAll.Count)
            {
                string s = docAll[currentEleIndex].GetAttribute("classname");


   

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值