主题:【求助】WebBrowser的问题 -- 龙驹坝
写了段WebBrowser代码,准备下载点数据。基本代码如下,问题出在保存部分,2010-01-01以后,内容不全。如果用ShowSaveAsDialog,每次都要确认,跟手工没区别。Document.ExeCommand("SaveAs",false,"..")的false参数无效,每次都要弹出那个对话框来。
那位有什么办法没有?
//初始化 WebBrowser webBrowser = new WebBrowser(); webBrowser.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(Deleme); webBrowser.Navigate(new Uri("http://www.ctgpc.com.cn/inc/sqsk.php")); //处理 HtmlElementCollection tagsCollection = webBrowser.Document.GetElementsByTagName("input"); foreach (HtmlElement currentTag in tagsCollection) { if (currentTag.GetAttribute("name").Equals("NeedCompleteTime2")) { currentTag.SetAttribute("value", strDate); break; } } HtmlElementCollection col = webBrowser.Document.GetElementsByTagName("img"); foreach (HtmlElement element in col) { string strAtt=element.GetAttribute("src"); if (strAtt.IndexOf(@"/images/search2.jpg") != -1) { element.InvokeMember("onclick"); break; } } m_dt_delme = m_dt_delme.AddDays(1) ; //问题出在保存部分 writer.Writer(webBrowser.Document.Body.InnerHtml)
This parameter is ignored. The Save HTML Document dialog box is always displayed……
如果是那个三峡数据,日期POST到服务端,用脚本+CURL来下载三峡数据吧。
弹确认框还弹,但是可以用FindWindowEx(或者类似的一个函数),找到弹框的窗口句柄,再找到确认按钮的窗口句柄,给这个窗口句柄发一个\D的WM_CHAR自动按下去就可以了
或者,这个WebBrowser我在Delphi里用的时候,有一个方法可以直接保存成文本形式的,那个不需要确认,以前做西西河浏览器,我就用过,不过是Delphi封装了一遍。
如果保存成文本可以,我就去找找代码发给你
writer.Writer(webBrowser.Document.Body.InnerHtml)
你这个writer是什么?应当没有必要用WebBrowser自己的writer。write部分的代码应该是这样:
wchar_t *pText = webBrowser.Document.Body.InnerHtml; int fileHandle = open("...",O_CREAT|O_TRUNC|O_BINARY,S_IREAD|S_IWRITE); write(fileHandle,pText,wcslen(pText)*sizeof(wchar_t)); SysFreeString(pText);
如果还不行的话,看看用InnerText行不,不过这样就丢掉了所有格式。我用过InnerText,肯定是可以的。
InnerHtml的内容不全:只有半截,内容丢了大半。
我刚试验了以下代码,没有问题:
_di_IDispatch pDispDoc = Browser->Document; TComPtr<IHTMLDocument2> pDoc; if(pDispDoc->QueryInterface(IID_IHTMLDocument2,(void **)&pDoc)!=S_OK) { return; } TComPtr<IHTMLElement> pBody; if(pDoc->get_body(&pBody)!=S_OK) { return; } wchar_t *pText = NULL; if(pBody->get_innerHTML(&pText)!=S_OK) { return; } //use pText SysFreeString(pText);
获得的HTML代码是<body>到</body>之间的所有数据。数据是全的,没有问题。代码是在事件DocumentComplete里面用的。
想不到现在还要捡起来。。。有效还是有效的。