c# winform webbrowser 取网页内容

bybee 2013-08-19 10:12:55
http://list.taobao.com/itemlist/default.htm?q=%CB%AB%D0%C7%B7%AB%B2%BC%D0%AC&commend=all&ssid=s5-e&search_type=item&atype=&filterFineness=&rr=1&style=grid&cat=2203%2C50010728%2C50016756%2C50010388%2C50484015&abver=old&input_query=%CB%AB%D0%C7&suggest_offset=0&from=suggest&spm=a2106.m944.1000187.1

想取这个网页上的 宝贝图片 可取得html文件里面是这样的


<!-- 宝贝区域 -->
<div id="list-itemList" class="list-mod" data-spm="1000384" data-module="itemList"></div>


郁闷 怎么取 这个宝贝区域里面的内容啊!!!!
...全文
659 23 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
bybee 2013-08-20
  • 打赏
  • 举报
回复
引用 2 楼 tcmakebest 的回复:
document.getElementById("list-itemList").outerHTML 用webbrowser吧,有800多行
这个到时取到内容,但时间不同 取得内容不一样,好像要等一段时间才取全
bybee 2013-08-20
  • 打赏
  • 举报
回复
我取得的Document.All 就跟右键查看网页源文件一样! 宝贝区域 没有宝贝内容
bybee 2013-08-20
  • 打赏
  • 举报
回复
引用 6 楼 yuwenge 的回复:
在documentcomplete时间里试试。如果不行就等上几秒再试。
你能说具体点吗
tcmakebest 2013-08-20
  • 打赏
  • 举报
回复
document.getElementById("list-itemList").outerHTML 用webbrowser吧,有800多行
卧_槽 2013-08-20
  • 打赏
  • 举报
回复
在documentcomplete时间里试试。如果不行就等上几秒再试。
bybee 2013-08-20
  • 打赏
  • 举报
回复
郁闷 好像是ajax加载的
fjxmdennis 2013-08-20
  • 打赏
  • 举报
回复
网络延迟也有可能会造成高度一直没变化。高度判断不一定可行。
happySnow_zhe 2013-08-20
  • 打赏
  • 举报
回复
引用 楼主 bybee 的回复:
想取这个网页上的 宝贝图片 可取得html文件里面是这样的 <!-- 宝贝区域 --> <div id="list-itemList" class="list-mod" data-spm="1000384" data-module="itemList"></div> 郁闷 怎么取 这个宝贝区域里面的内容啊!!!!
之所以你获取到的只是个空的DIV,那么多半原因是由于你的网页没有加载完成所以导致你没有获取到里面的内容,你可以封装一个获取图片路径的方法将,过会儿执行该方法你就可以看到里面的内容了。如果只是针对于该页面做那么还是比较简单的。下面的做参考:

       private void GetImagesSrc()
        {
            HtmlElement htmlEle = webBrowser1.Document.GetElementById("list-itemList");
            HtmlElementCollection htmlCollection = htmlEle.GetElementsByTagName("img");
            foreach (HtmlElement var in htmlCollection)
            {
                richTextBox1.AppendText(var.GetAttribute("src") + "\r\n");
            }
        }
bybee 2013-08-20
  • 打赏
  • 举报
回复
引用 2 楼 tcmakebest 的回复:
document.getElementById("list-itemList").outerHTML 用webbrowser吧,有800多行
解决了,用outerHTML 判断里面有多少宝贝,小于96个 就拉滚动条,然后再判断,直到满足条件再进入下一步 方法有点笨 谁有更好的 告诉我下
宝_爸 2013-08-20
  • 打赏
  • 举报
回复
我这里链接访问不到了。
bybee 2013-08-20
  • 打赏
  • 举报
回复
忘了 我去试试
happySnow_zhe 2013-08-20
  • 打赏
  • 举报
回复
引用 18 楼 bybee 的回复:
框架高度是变化的啊
引用 19 楼 bybee 的回复:
只有全部加载完才不变化 我想去现在滚动条的位置,跟上次滚动条的位置进行比较
是啊,框架高度是变化的啊,所以比较的时候如果相等就说明没有改变了嘛,一个道理…
bybee 2013-08-20
  • 打赏
  • 举报
回复
只有全部加载完才不变化 我想去现在滚动条的位置,跟上次滚动条的位置进行比较
bybee 2013-08-20
  • 打赏
  • 举报
回复
框架高度是变化的啊
happySnow_zhe 2013-08-20
  • 打赏
  • 举报
回复
引用 16 楼 bybee 的回复:
知道怎么取得滚动条的位置吗? 如果两次取得的位置都一样 就证明到底部了
我上面的说过了,框架的高度,比较每次获取的高度就好了…
bybee 2013-08-20
  • 打赏
  • 举报
回复
知道怎么取得滚动条的位置吗? 如果两次取得的位置都一样 就证明到底部了
happySnow_zhe 2013-08-20
  • 打赏
  • 举报
回复
引用 14 楼 bybee 的回复:
延迟也取不到,它延迟只去掉前12个宝贝,只有向下拉滚动条 才能取更多! 一个100个宝贝呢
因为你只是针对一个网页,所以这里就不考虑对其他网页的兼容了。因为js的加载是无法触发webBrowser控件的DocumentCompleted事件的,对于这点,就不能依靠DocumentCompleted事件。对于网页是滚动加载的情况,可以操作webBrowser控件的滚动条:webBrowser1.Document.Window.ScrollTo(0, 框架高度);那么怎么知道滚动条真的到达底部了呢?这里就得用到延迟了。我建议可以使用个时间控件,每秒执行一次将滚动条置于底部,那么多少秒才合适,那就看你的实际情况了,一般3秒左右。该方案仅作参考,如果有更好的方案,可以分享下…
bybee 2013-08-20
  • 打赏
  • 举报
回复
延迟也取不到,它延迟只去掉前12个宝贝,只有向下拉滚动条 才能取更多! 一个100个宝贝呢
happySnow_zhe 2013-08-20
  • 打赏
  • 举报
回复
。。都说了是你获取内容时网页加载没有完成,所以获取到的只是空的DIV,你延迟时间获取就可以了…
bybee 2013-08-20
  • 打赏
  • 举报
回复
郁闷 这个需要滚动条 滚动才能加载,如果判断滚动条已经到底部了
加载更多回复(2)

111,094

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧