구현할 기능은 다음 그림에 나와 있습니다. 특정 세부 사항은 다음과 같습니다.
이제 소프트웨어의 다른 기능을 소개하겠습니다. 모두가 도움이되기를 바랍니다.
시뮬레이터 검색 제품
주문을 닦을 때는 제품 URL을 직접 가져 와서 구매 페이지를 입력 할 수 없습니다. 인공 검색을 시뮬레이션해야합니다.
이 과정에는 두 가지 어려움이 있습니다.
1) 제품 목록의 비동기 적재; 2) 페이지를 돌리고 스크린 샷을 찍습니다.
정원에서 나는 더 이상 Guan Gong 앞에서 큰 검을 가지고 놀지 않습니다.
키 코드를 직접 업로드하십시오.
I : 제품을 검색하고 페이지를 돌립니다
공개 부? SearchProduct (TaskDetailModel TaskDetailData) {bool? result = null;bool isIndex = true;bool isList = true;WebBrowserTask.Instance.SetProperties();WebBrowserTask.Instance.ClearDocumentCompleted();WebBrowserTask.Instance.DocumentCompleted += (wbSenderSearch, wbESearch) =>{System.Windows.Forms.WebBrowser currentWB = wbSenderSearch AS System.Windows.Forms.WebBrowser; System.Windows.Forms.htmlDocument currentDoc = currentWb.document; mshtml.htmldocument currentdom = currentDoc.document as mshtml.htmldocument; String wburl = wbesearch.url.tostring (if); system.windows.forms.webbrowserReadystate.complete) {#지역 홈 검색 if (wburl.contains ( "www.taobao.com")) {if (isindex == taly) {isindex = false; taskdetaildata.detailremark = string.format ( "@"enter keywords ""{0} "" taskDetailData.taskName); func <bool> func = () = () => {bool asynctag = false; system.threading.thread.sleep (5000); asynctag = true; return asynctag;}; func.begininvoke ((ar) => {bool asyncresult = func.endc.endvoke (ar a); (asyncresult) {system.windows.forms.htmlelement heee = currentDoc.getElementById ( "j_searchTab"); String className = heee.getAttribute ( "className"); System.Windows.Forms.htmlement = heee.children [0]; htmlmlmleMleTmlic.htmllementCollic = hitem.children; system.windows.forms.htmlelement li1 = heclis [0]; system.windows.forms.htmlelement li2 = heclis [1]; system.windows.htmlelement li3 = heclis [2]; foreach (system.windows.forms.htmlelement Li) li.getAttribute ( "className"); if (liclass.contains ( "selected")) {system.windows.forms.htmlelement q = currentDoc.getElementById ( "Q"); System.Windows.Forms.htmlEment Btnsearch = currentDoc.getElementById ( "j_tsearchform") ! = null && btnsearch! = null) {q.focus (); q.setAttribute ( "value", taskDetailData.taskName); btnsearch.focus (); String savepath = path.combine (userData.workBenchDiRectory, taskDetailData.taskDetailCode, string. ""); captureImage.captureWebPagearea (currentdom, savepath); btnsearch.invokemember ( "click");}}}}}}}}}}}}}}}}}#endregion 홈 검색#지역 제품 목록 (wburl.contains ( "s.taobao.com")) {if (islist = islist = islist = islist = islist) {islist =}). false; fULS; fUND; fULS; fULS; fUND; fUND; fUND; fULS; fULS; fuald; functag = false; asynctag = true; return asynctag;}; func.begininvoke ((ar) => {bool asyncresult = func.endinVoke (ar asyncresult) {clickpecte (transucturl) pagry page priceze page priceze analyze (asyncresult). taskDetailData); result = true;}}, null);}}#endregion product list}}; // documentCompleted end system.windows.application.current.dispatcher.invoke (new System.Accion (() => {webBrowsertask.instance.navigate ( "https://www.taobao.com/"); int i <120; i ++) {system. (result! = null) {break;}} return result;} II : 각 페이지가 비정상적으로로드되었으므로 웹 페이지의 스크린 샷을 찍고 전체 웹 페이지를 캡처 할 적절한 시간을 선택하십시오.
/*컨트롤이 포함되어 있으므로 스레드에서 호출되면 System.windows.application.current.dispatcher.invoke (new System.Accient (() => {// htmldoc.window.Scrollto (5000, htmldoc.body.scrostald.))와 함께 사용해야합니다. string.format (@"d :/{0} .jpg", guid.newguid (). toString ()); captureImage.captureWebPage (webbrowsertask, savepath), system.windows.threading.dispatcherpriority.background); /// <summary> // // // // //// </summary> ///// <param name = "web"> </param> //// <param name = "savepath"> </param> public static void captureWebPage (system.windows.forms.webbrowser web, String savepath) {사각형 Body = web.document.sbody.scrollRectangle; new eartangle () {new ition () {) {). size (body.width, body.height)}; web.dock = dockstyle.none; web.width = docrectangle.width; web.height = docrectangle.height; 사각형 imgrectangle = docrectangle; 사용 (BitMap BitMap = new BitMap (imgrectangle.width, imgrectangle.height))) {iviewObject ivo = web.document.document.domdocument as as IviewObject; intptr.zero, intptr.zero, hdc, ref imgrectangle, ref docrectangle, intptr.zero, 0); g.releasehdc (hdc);} bitmap.save (savepath, system.drawing.imaging.imageformat.jpeg); bitmap.dispose ();}}. 웹 페이지의 특정 영역을 찍습니다.
/// <summary> /// 웹 페이지의 일부를 가로 채기 /// </summary> /// <param name = "htmldom"> </param> /// <param name = "savepath"> </param> public static void capturewebpagearea (mshtml.htmldocument htmldom, String SavedIr =) system.io.path.getDirectoryName (savepath); if (! system.io.directory.exists (savedir)) {system.io.directory.createdirectory (savedir);} 사각형 docrectangle = new Rectangle () {location = new Point (0, 0), // size = new Size (htmldom.body.offsetwidth. htmldom.body.offsetheight) 크기 = 새로운 크기 ((int) system.windows.systemparameters.primaryscreenwidth, (int) system.windows.systemparameters.primaryscrecreenheight)}; rectangle imgrectangle = docrectangle; 사용 (BitMap BitMap = new BitMap (imgrectangle.width, imgrectangle.height))) {iviewObject ivo = htmldom as as iviewObject; uding (Graphics G = Graphics.fromImage (bitmap)) {intptr hdc = g.gethdc (); ivo.wraw (1, intptr.zero, intptr.zero, intptr.zero) intptr.zero, intptr.zero, hdc, ref imgrectangle, ref docrectangle, intptr.zero, 0); g.releasehdc (hdc);} bitmap.save (savepath, system.drawing.imaging.imageformat.jpeg); bitmap.dispose ();}}. 이 코드에는 흥미로운 스 니펫이 많이 있습니다. 관심있는 친구들이 알게 될 것입니다.