试着从一个网站上下载图片,但是循环永远不会结束

本文关键字:循环 永远 结束 下载 网站 一个 | 更新日期: 2023-09-27 18:04:18

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Net;
using System.IO;
using HtmlAgilityPack;
using mshtml;
namespace Extract_Images
{
    public partial class Form1 : Form
    {
        private string[] linkstoextract;
        private int numberoflinks;
        private int currentLinkNumber = 1;
        private string mainlink;
        private WebClient client;
        private WebBrowser webBrowser1;
        public Form1()
        {
            InitializeComponent();
            webBrowser1 = new WebBrowser();
            webBrowser1.ScriptErrorsSuppressed = true;
            webBrowser1.DocumentCompleted += webBrowser1_DocumentCompleted;
            label1.Text = "Number of links: ";
            mainlink = "http://www.test.com";
            numberoflinks = 211;
            ProcessNextLink();
        }
        private void ProcessNextLink()
        {
            if (currentLinkNumber < numberoflinks)
            {
                currentLinkNumber++;
                string linktonav = mainlink + "index"+currentLinkNumber.ToString() + ".html";
                webBrowser1.Navigate(linktonav);
            }
        }
        void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
            ProcessImagesFromDocument();
            ProcessNextLink();
        }

        private void ProcessImagesFromDocument()
        {
            IHTMLDocument2 doc = (IHTMLDocument2)webBrowser1.Document.DomDocument;
            IHTMLControlRange imgRange = (IHTMLControlRange)((HTMLBody)doc.body).createControlRange();
            foreach (IHTMLImgElement img in doc.images)
            {
                imgRange.add((IHTMLControlElement)img);
                imgRange.execCommand("Copy", false, null);
                using (Bitmap bmp = (Bitmap)Clipboard.GetDataObject().GetData(DataFormats.Bitmap))
                {
                    if (bmp != null)
                    {
                        bmp.Save(@"d:'files'savedlinks'" + img.nameProp);
                        pictureBox1.Image = bmp;
                    }
                }
            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {
        }
    }
}

在部分:

using (Bitmap bmp = (Bitmap)Clipboard.GetDataObject().GetData(DataFormats.Bitmap))
                {
                    if (bmp != null)
                    {
                        bmp.Save(@"d:'files'savedlinks'" + img.nameProp);
                        pictureBox1.Image = bmp;
                    }
                }

即使bmp在一次迭代后不为空,我也会在bmp上得到异常。保存行:路径

中的非法字符

我看到nameProp 395937.thumb?d = 1348638415

另一个问题是,如果我不使用

行:
bmp.Save(@"d:'files'savedlinks'" + img.nameProp);
pictureBox1.Image = bmp;

如果我删除这两行并在行上使用断点:

if (bmp != null)

它会永远在这一行停止它永远不会停止它会一直在这一行停止它不会在前一行停止而只在这一行停止

我想做的是从每个链接的图像下载,也使其可选下载特定的图像类型,如只有jpg或只有png。

试着从一个网站上下载图片,但是循环永远不会结束

路径错误中的非法字符是因为您的文件名不是要保存的有效文件名,因为它具有无效字符,如:'?'

为什么循环是无止境的,这需要更多的调试,一步一步调试你的代码,检查第一个循环上的图像数量,

  • 是一个巨大的意想不到的图像数量?
  • 每个循环的数量增加吗?->这可能是一个引用问题。