class Program { public static void Main(string[] args) { int i=0; String[] urlarray = new String[] { "http://www.baidu.com/", "http://msdn.microsoft.com/", "http://www.qidian.com/Default.aspx" }; RefreshPage repa = new RefreshPage(0, 1, urlarray, false); while (i < 7) { repa.Next(); repa.FindCurrent = "No"; i++; } } }
class RefreshPage { int CurrentPage; int NextPage; String[] UrlArray; public String FindCurrent="No"; bool Stop; public RefreshPage(int CurrentPage, int NextPage, String[] UrlArray, bool Stop) { this.CurrentPage = CurrentPage; this.NextPage = NextPage; this.UrlArray = UrlArray; this.Stop = Stop; } public void Next() { SHDocVw.ShellWindows sw = new SHDocVw.ShellWindows(); while (FindCurrent == "No") { foreach (SHDocVw.InternetExplorer Iweb in sw) { if (Iweb.LocationURL.StartsWith(UrlArray[CurrentPage])) { HTMLDocument doc2 = Iweb.Document as HTMLDocument; HTMLScriptElement script = (HTMLScriptElement)doc2.createElement("script"); script.text = "function newDoc(url){window.location.assign(url)} t=setTimeout("newDoc(" + "'" + UrlArray[NextPage] + "'" + ")", 5000)"; HTMLBody body = doc2.body as HTMLBody; if (body != null) { body.appendChild((IHTMLDOMNode)script); FindCurrent = "Yes"; } else continue; } } } CurrentPage+= 1; NextPage += 1; if (NextPage >= UrlArray.Length) NextPage = 0; if (CurrentPage >= UrlArray.Length) CurrentPage = 0; System.Console.WriteLine("current"); } }
1. 首先需要引用两个dll
SHDocVw.dll
mshtml.dll
2. 本例子是按照所给出的数组,数组中存储的是将要循环访问的url,程序访问打开的网页寻找与数组的第一个url匹配的值,并且给他添加脚本,使该网页跳转到另一个url,即
数组的下一个值,使数组中所有url循环访问到。
3. 变量FindCurrent非常重要,由于浏览器打开一个网页需要时间,而程序读取确是,很快的,如果没有这个变量的判断,则代码会一直读不到当前要寻找的url。
while (FindCurrent == "No")
同理读取到当前url,但是html内容还没有load完,也无法读到html 的body,会导致一直读不到html body,下面这个判断也非常重要
if (body != null)