快来帮帮我,今天就要解决抓取网页问题

问题描述

我用C#做一个WINFORM程序,用来抓取某个网页上的TETXBOX再往里面填数据。但这个网页是用openModalDialog方法弹出的窗口,我只能找到它的父窗口找不到它,上午查了半天还是没得法,请各位大虾指点小子一、二。

解决方案

解决方案二:
constintWM_GETTEXT=0x000D;constintWM_SETTEXT=0x000C;constintWM_CLICK=0x00F5;[DllImport("User32.dll",EntryPoint="FindWindow")]privatestaticexternIntPtrFindWindow(stringlpClassName,stringlpWindowName);[DllImport("user32.dll",EntryPoint="FindWindowEx")]privatestaticexternIntPtrFindWindowEx(IntPtrhwndParent,IntPtrhwndChildAfter,stringlpszClass,stringlpszWindow);[DllImport("User32.dll",EntryPoint="SendMessage")]privatestaticexternintSendMessage(IntPtrhWnd,intMsg,IntPtrwParam,stringlParam);voidPopLogin(){//下面的这些参数都可以用Spy++查到stringlpszParentClass="#32770";//整个窗口的类名stringlpszParentWindow="登录窗口标题";//窗口标题//stringlpszClass="Edit";//需要查找的子窗口的类名,也就是输入框stringlpszClass_Submit="Button";//需要查找的Button的类名stringlpszName_Submit="确定";//需要查找的Button的标题stringtext="";IntPtrParenthWnd=newIntPtr(0);IntPtrEdithWnd=newIntPtr(0);IntPtrip=newIntPtr(0);//查到窗体,得到整个窗体ParenthWnd=FindWindow(lpszParentClass,lpszParentWindow);//判断这个窗体是否有效if(!ParenthWnd.Equals(IntPtr.Zero)){EdithWnd=FindWindowEx(ParenthWnd,EdithWnd,"SysCredential","");if(!EdithWnd.Equals(IntPtr.Zero)){ip=EdithWnd;EdithWnd=FindWindowEx(ip,newIntPtr(0),"Edit","");if(!EdithWnd.Equals(IntPtr.Zero)){text="你的密码";SendMessage(EdithWnd,WM_SETTEXT,(IntPtr)0,text);retval++;}EdithWnd=FindWindowEx(ip,newIntPtr(0),"ComboBoxEx32","");if(!EdithWnd.Equals(IntPtr.Zero)){ip=EdithWnd;EdithWnd=FindWindowEx(ip,newIntPtr(0),"ComboBox","");if(!EdithWnd.Equals(IntPtr.Zero)){ip=EdithWnd;EdithWnd=FindWindowEx(ip,newIntPtr(0),"Edit","");if(!EdithWnd.Equals(IntPtr.Zero)){text="你的账号";//调用SendMessage方法设置其内容SendMessage(EdithWnd,WM_SETTEXT,(IntPtr)0,text);retval++;}}}}//得到Button这个子窗体,并触发它的Click事件EdithWnd=FindWindowEx(ParenthWnd,newIntPtr(0),lpszClass_Submit,lpszName_Submit);if(!EdithWnd.Equals(IntPtr.Zero)){SendMessage(EdithWnd,WM_CLICK,(IntPtr)0,"0");retval++;}}}
解决方案三:
我调用了usingmshtml;usingSHDocVw;
解决方案四:
网页并不是普通Windows应用程序,你用Spy++是无法抓取网页上的Textbox等控件的,所以1楼的办法是对网页没有作用的.对于网页弹出框,你有两个选择.1.使用MSAA技术,Google"MicrosoftActiveAccessibility"2.获取弹出框的handle,这个你可以用FindWindows,然后注册WM_HTML_GETOBJECT消息来获取IHTMLDocument接口,就可以操作里面的控件了.IntPtrieServerHandle=//弹出框的"InternetExplorer_Server"handle.intnMsg=Win32API.RegisterWindowMessage("WM_HTML_GETOBJECT");UIntPtrlRes;if(Win32API.SendMessageTimeout(ieServerHandle,nMsg,0,0,Win32API.SMTO_ABORTIFHUNG,1000,outlRes)==0){returnnull;}return(HTMLDocument)Win32API.ObjectFromLresult(lRes,typeof(IHTMLDocument).GUID,IntPtr.Zero);

解决方案五:
呵呵,没看清楼主的需求,不好意思,我那个是针对弹出式登录的。
解决方案六:
引用3楼shrinerain的回复:

网页并不是普通Windows应用程序,你用Spy++是无法抓取网页上的Textbox等控件的,所以1楼的办法是对网页没有作用的.对于网页弹出框,你有两个选择.1.使用MSAA技术,Google"MicrosoftActiveAccessibility"2.获取弹出框的handle,这个你可以用FindWindows,然后注册WM_HTML_GETOBJECT消息来获取IHTMLDocument接口,就可以操作里面的控件了.C#codeIntPtrieServerHandle=//弹出框的"InternetExplore…

厉害!
解决方案七:
厉害

时间: 2024-08-18 06:34:57

快来帮帮我,今天就要解决抓取网页问题的相关文章

技术-用jsoup抓取网页获取网页源码的时候,得到的源码和在网站上面点击右键查看源码不相同,怎么解决

问题描述 用jsoup抓取网页获取网页源码的时候,得到的源码和在网站上面点击右键查看源码不相同,怎么解决 用jsoup抓取网页获取网页源码的时候,得到的源码和在网站上面点击右键查看源码不相同,怎么解决 Document doc = Jsoup.parse(new URL(url), 5000); 解决方案 一部分html是ajax异步加载的,你得用fiddler调试,得到这些请求,照着写 解决方案二: C++ 抓取网页的源码获取网页的源码获取网页源码工具类

linux-求助!!!curl抓取网页出现浏览器不支持嵌入式框架,该如何解决

问题描述 求助!!!curl抓取网页出现浏览器不支持嵌入式框架,该如何解决 各位大神,我用curl来抓取学校网页时出现这种情况应该如何解决呀! ![http://img.ask.csdn.net/upload/201604/01/1459483867_199566.jpg]() 解决方案 curl抓取网页内容,跟浏览器怎么查看没关系,或者你的请求被服务器检测出不符合

关于java 使用 socket 抓取网页的问题。

问题描述 学校布置了一个大作业,是用javasocket做一个简单的浏览器,需要自己抓取HTML代码然后自己去解析HTML的标签,在做的过程中需要用GET的方法去发送HTTPHEADER,然后得到响应,现在有几个问题:1.有些是HTTP1.0有些是HTTP1.1这个头文件怎么设置才能得到正确的回应2,我在尝试链接GOOGLE的时候,返回的是302FOUND,我输入的地址是www.google.com,期中返回的头文件里有个LOCATION:www.google.co.uk,然后我直接输入www.

百度抓取网页文件规则最大125K

百度的名字寄托着百度公司对自身技术的信心,另一层含义就是突破"事儿做到九十九度就是做到头"的西方说法,百度就是想要力争做到一百度,做到顶上开花的境界. 百度公司不同于一般意义上的网络公司.它既不是着眼于互联网内容的提供,也不是门户网站,而是一家立足于自主掌握并提供互联网核心技术的技术型公司.在中国互联网经济迅猛发展的今天,百度公司结合世界先进的网络技术.中国语言特色以及中国互联网经济发展的现状,开发出了中国互联网信息检索和传递基础设施平台,并且运用最先进的商业模式,直接为整个中国的互联

ajax-请问关于java 通过http client抓取网页信息返回:请开启JavaScript并刷新该页

问题描述 请问关于java 通过http client抓取网页信息返回:请开启JavaScript并刷新该页 初学httpClient,想去抓取某个网页查询出来的结果信息,通过浏览器监控发现response出来的信息和java控制台打印出来的不一样. package com.test; import java.io.IOException; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import

抓取数据-用jsoup抓取网页数据的时候,在本地开发环境上面没有问题,但是把他部署到阿里云上面就不行

问题描述 用jsoup抓取网页数据的时候,在本地开发环境上面没有问题,但是把他部署到阿里云上面就不行 用jsoup抓取网页数据的时候,在本地开发环境上面没有问题, 但是把他部署到阿里云上面去的时候,就连接超时.但奇怪的是,我对4,5个网址进行抓取, 就一个网址连接超时,高手帮忙解决下 解决方案 有没有人在 有没有人在 有没有人在

网页抓取-抓取网页相关的应用程序

问题描述 抓取网页相关的应用程序 我需要抓取海词典典网站上所有四级词汇在"词汇搭配"那一栏的内容,谁能帮我做个解决这个问题的软件,我的QQ邮箱是1036418603@qq.com

PHP中使用file_get_contents抓取网页中文乱码问题解决方法_php技巧

本文实例讲述了PHP中使用file_get_contents抓取网页中文乱码问题解决方法.分享给大家供大家参考.具体方法如下: file_get_contents函数本来就是一个非常优秀的php自带本地与远程文件操作函数,它可以让我们不花吹挥之力把远程数据直接下载,但我在使用它读取网页时会碰到有些页面是乱码了,这里就来给各位总结具体的解决办法. 根据网上有朋友介绍说原因可能是服务器开了GZIP压缩,下面是用firebug查看我的网站的头信息,Gzip是开了的,请求头信息原始头信息,代码如下: 复

HttpWebRequest 抓取网页数据问题!!!

问题描述 各位高手:我使用HttpWebRequest类来抓取http://kr.mouser.com网页的数据,我选择的是韩语的页面,可是抓下来的数据是中文的,哪位高手给个解决方案.万分感激!附上代码HttpWebRequestwebRequest=(HttpWebRequest)WebRequest.Create("http://kr.mouser.com");webRequest.Method="GET";webRequest.Headers.Set(&quo