0
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 string mainlink;
private WebClient client;
private WebBrowser webBrowser1;
public Form1()
{
InitializeComponent();
webBrowser1 = new WebBrowser();
webBrowser1.DocumentCompleted += webBrowser1_DocumentCompleted;
label1.Text = "Number of links: ";
mainlink = "http://www.test.com/index";
numberoflinks = 211;
for (int i = 0; i < numberoflinks; i++)
{
webBrowser1.Navigate(mainlink + i + ".html");
GetHtmlFromUrl(mainlink + i + ".html");
}
}
void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
throw new NotImplementedException();
}
private void GetHtmlFromUrl(string url)
{
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))
{
bmp.Save(@"C:\" + img.nameProp);
}
}
}
private void Form1_Load(object sender, EventArgs e)
{
}
}
}
问题是,现在我使用for循环来遍历每个链接并提取图像。如何确保在完成事件时使用webBrowser?
问题是,在它将从第一个链接提取所有图像之前,它将继续执行for循环,并已尝试浏览到下一个链接。
我需要以某种方式使用一段时间或其他东西,以确保它将浏览第一个链接将获得完成的事件,它将提取图像的所有链接,只有当它完成工作时提取所有图像第一个html然后保留在循环中的下一个。
接下来,我有所有页面的所有图像链接列表后,然后我想要下载所有的图像使用链接。但问题正如我上面所述。
问题是,在ProcessImagesFromDocument()方法后它永远不会继续。我使用了一个断点,并且在foreach之后能够停止。它只是没有做任何事情,我看到form1的形式,这没什么。不知道为什么它不会继续。 –