用webbrowser操作网页并下载图片

我现在想在C#的窗体上放一个按钮,一个文本框,一个图片容器
想达到,点击按钮时,程序会自动进入这个网站,自动点击网站上的“自动生成”按钮,然后自动下载网站上生成的图片,
加载到图片容器中去。

请问如何实现?

也可以去模拟提交获取图片不过按钮参数都得你自己弄


            string url = "http://www.zitiweb.com/";
            string parameters = "text=123&ziti=30&size=32&fontcolor=%23008738&bgcolor=%23CBE967";

            WebClient client = new WebClient();
            client.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded";
            string result = client.UploadString(url, parameters);

            string filePath = Regex.Match(result, "temp/[^\"]*").Value;
            string picUrl = "http://www.zitiweb.com/" + filePath;

            byte[] bytes = client.DownloadData(picUrl);

            using (MemoryStream ms = new MemoryStream(bytes))
            {
                ms.Write(bytes, 0, bytes.Length);
                Image photo = Image.FromStream(ms, true);
                pictureBox1.Image = photo;
            }

一种不用重新请求的方法,通过剪贴板复制,需要
Imports mshtml

 Public Shared Function GetRegCodePic(ByVal wbMail As WebBrowser, ByVal ImgName As String, ByVal Src As String, ByVal Alt As String) As Image
        Dim doc As HTMLDocument = DirectCast(wbMail.Document.DomDocument, HTMLDocument)
        Dim body As HTMLBody = DirectCast(doc.body, HTMLBody)
        Dim rang As IHTMLControlRange = DirectCast(body.createControlRange(), IHTMLControlRange)
        Dim Img As IHTMLControlElement
        If ImgName = "" Then
            '如果没有图片的名字,通过Src或Alt中的关键字来取
            Dim ImgNum As Integer = GetPicIndex(wbMail, Src, Alt)
            If ImgNum = -1 Then
                Return Nothing
            End If
            Img = DirectCast(wbMail.Document.Images(ImgNum).DomElement, IHTMLControlElement)
        Else
            Img = DirectCast(wbMail.Document.All(ImgName).DomElement, IHTMLControlElement)
        End If
        rang.add(Img)
        rang.execCommand("Copy", False, Nothing)
        Dim RegImg As Image = Clipboard.GetImage()
        Clipboard.Clear()
        Return RegImg
    End Function

    Public Shared Function GetPicIndex(ByVal wbMail As WebBrowser, ByVal Src As String, ByVal Alt As String) As Integer
        Dim imgnum As Integer = -1
        For i As Integer = 0 To wbMail.Document.Images.Count - 1
            '获取所有的Image元素
            Dim img As IHTMLImgElement = DirectCast(wbMail.Document.Images(i).DomElement, IHTMLImgElement)
            If Alt = "" Then
                If img.src.Contains(Src) Then
                    Return i
                End If
            Else
                If Not String.IsNullOrEmpty(img.alt) Then
                    If img.alt.Contains(Alt) Then
                        Return i
                    End If
                End If
            End If
        Next
        Return imgnum
    End Function

我只是说下载的时候可以直接从页面复制。。比较完整的思路是这样的:
1、打开页面
WebBrowser1.Navigate("http://www.zitiweb.com/kaishu/?=754|860|861")
2、在页面完成事件中等待
       2.1输入字符
        WebBrowser1.Document.All("text").SetAttribute("value", "test")
       2.2模拟点击
        For Each p As HtmlElement In WebBrowser1.Document.All
            If p.GetAttribute("ClassName") = "btn btn-primary submit" Then
                p.InvokeMember("click")
                Exit For
            End If
        Next
3、在页面完成事件中等待
      3.1复制返回的图像
      GetWebImg.GetRegCodePic(WebBrowser1, "SaveImg", "", "")

实际上,除非页面显示是必要的,否则还是http请求的方式更好一些,不然你会遇到一些js错误弹框等等需要挨个处理,还是很费时的。然后说一下如何获取这些页面元素调用和一些需要注意的地方(我比较习惯用edge,360也可以)
1、右键点输入框,检查元素(审查元素)
2、观察编码,其中有很多可以用的东西,这个最直观的就是id="text"
3、尝试用WebBrowser1.Document.GetElementById(我用的all)获得元素
4、调用SetAttribute方法设置该元素的"value"属性

同样的,右键点击”点击生成“按钮,可以看到这个元素的内容。发现只有class=" oooxxxxx "和type="button",从type识 别就麻烦去了,直接用class,和之前的差不多,只不过js支持getebyclassname,vb.net不支持,自己写一下,需要注意的是虽然显 示的是class="ooxx",但是这个属性是ClassName,所以

            If( p.GetAttribute("ClassName") == "btn btn-primary submit" ){
                p.InvokeMember("click");
              break;
         }

p.InvokeMember("click");是调用一个方法,button元素点击时的方法就是click咯

关于那个编码的问题,那个不是改请求头的类型。。。。。。。。。。。。那个应该是url后面的参数,也可以在client.Headers里面设置。
后面那个text=就是你输入的字符转码之后的东西,是显示页面回传的参数(http请求参数),你可以
小蜜蜂论坛顶帖机查找一下相关资料看看& %都是干嘛的

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值