当前位置: 首页 > news >正文

宁波 网站建设天津市建设工程造价管理信息网

宁波 网站建设,天津市建设工程造价管理信息网,中国建筑公司排名前20,软件工程技术学什么无论是模拟网页点击还是直接协议发包#xff0c;都有其适用的环境。不同的需求选择不同的方案。如果只是简单的获取类似网页IP地址的需求#xff0c;实际上协议发包是最简单的。但如果是用户名网页登陆等稍微复杂的登陆要求#xff0c;则直接填写表单#xff0c;并获取按钮…无论是模拟网页点击还是直接协议发包都有其适用的环境。不同的需求选择不同的方案。如果只是简单的获取类似网页IP地址的需求实际上协议发包是最简单的。但如果是用户名网页登陆等稍微复杂的登陆要求则直接填写表单并获取按钮元素来模拟点击这个方案来讲相对简单。但需求若稍微再变化一点要求效率多线程这个时候又是协议发包会作为首选哪怕需要用户名网页登陆。没有最好的方案只有更合适的方案。这点很重要。 先说模拟网页点击方式一般我采用的是继承MFC里面的CDHtmlDialog类自己命名为CWebLoginDlg选择MFC并不是说有多好用而是本人对于MFC使用更熟悉学习成本更低仅此而已。 模拟网页逻辑就是个状态机的处理而状态的获取一个可以通过获取网页源码判断特征字符串的方式还有个可以通过XMLHttpRequest的回包判断数据的方式再有也可以通过获取网页元素com组件对象是否存在的方式。 先说获取网页源码基本原理是先获取网页DOC对象 然后遍历DOC里面的元素找到TAG为html的元素 get_outerHTMLc代码如下 std::wstring CWebLoginDlg::GetHtmlSource() {CComPtrIHTMLDocument2 sphtmlDoc;CComPtrIHTMLElementCollection pIHTMLElementCollect;GetDHtmlDocument(sphtmlDoc);if (!sphtmlDoc){return L;}sphtmlDoc-get_all(pIHTMLElementCollect);long iCount;pIHTMLElementCollect-get_length(iCount);CComBSTR data;for (int i 0; i iCount; i){CComVariant v3,v4;v3(long)i;v4.vtVT_I4;v4(long)0;CComPtrIDispatch pDisp;HRESULT hr pIHTMLElementCollect-item(v3,v4,pDisp);if (!SUCCEEDED(hr)){continue;}CComQIPtrIHTMLElement, IID_IHTMLElement pHTMLElement(pDisp);if(pHTMLElement NULL){continue;}CComBSTR strTagName;hr pHTMLElement-get_tagName(strTagName);if(!SUCCEEDED(hr)){continue;}CString strTagstrTagName;strTag.MakeLower();if(strTag!html){continue;}hr pHTMLElement-get_outerHTML(data);if(!SUCCEEDED(hr)){return L;}break;}std::wstring source data.m_str;return source; } 再说XMLHttpRequest XMLHttpRequest是对ajax技术的实现重点体现在包头的Content-Type字段这个字段值为application/x-www-form-urlencoded例如网页代码 function syncGameInfoAgent () {$.ajax({url : /api/web/syncGameInfoAgent,type : GET,cache : false,async : false,success : function(data, textStatus, jqXHR) {}});}这种方式的ajax还会多个X-Requested-With字段值为XMLHttpRequest回包数据都为json格式还有一种网页代码 var loadLoginInfo function() {$.ajax({url : getDomain() rest/user,type : GET,data : {fields : isNameCheck,charCount,isBlocked,isGameBlocked,extAccountInfo},cache : false,async : true,dataType : jsonp,success : function(response) { ...这种方式ajax没有X-Requested_With字段回包数据为网页数据。c实现方式如下 MSXML2::IXMLHTTPRequestPtr m_pIXMLHTTPRequest;m_pIXMLHTTPRequest.CreateInstance(Msxml2.XMLHTTP.6.0);std::wstring CWebLoginDlg::XMLHttpRequest( std::wstring url , std::string requestType/* GET*/) {BSTR bstrString NULL;HRESULT hrm_pIXMLHTTPRequest-open(requestType.c_str(), url.c_str(), false);SUCCEEDED(hr) ? 0 : throw hr;m_pIXMLHTTPRequest-setRequestHeader(X-Requested-With, XMLHttpRequest); //这里第二种情况则不能带有此字段m_pIXMLHTTPRequest-setRequestHeader(Content-Type, application/x-www-form-urlencoded);hrm_pIXMLHTTPRequest-send();SUCCEEDED(hr) ? 0 : throw hr;bstrStringm_pIXMLHTTPRequest-responseText; //第二种情况则m_pIXMLHTTPRequest-responseBodystd::wstring freePayString bstrString;if (bstrString){SysFreeString(bstrString);bstrString NULL;}return freePayString; }这里提供一个技巧找到ajax代码的实现可以先抓包得到http header里面的request url的url字符串然后在脚本里面去查找字符串一般字符串就在ajax代码 url : getDomain() rest/user里面搜索到搜索到后可以看代码对于返回值的处理这样才好方便写逻辑。 最后说下获取网页元素一般来说网页元素都会带有ID或者带有ClassName例如网页代码 input typepassword idpwd namepassword classuser_pw maxlength16 size12 autocompleteoff title???? ??如果想通过ID获取网页对象简单的可以直接通过GetElement函数来实现C代码如下 IHTMLElement *id NULL; this-GetElement(TEXT(id), id);如果想通过ClassName类名来获取网页对象C代码如下 CComQIPtr IHTMLElement CWebLoginDlg::GetElementByClassName( std::wstring className ) {CComPtrIHTMLDocument2 pIHTMLDocument2;GetDHtmlDocument(pIHTMLDocument2);HRESULT hr; CComQIPtr IHTMLElementCollection spElementCollection; hr pIHTMLDocument2-get_all( spElementCollection ); //取得表单集合 if ( FAILED( hr ) ) {ATLTRACE(获取集合 IHTMLElementCollection 错误);} long nFormCount0;hr spElementCollection-get_length( nFormCount ); if ( FAILED( hr ) ) {ATLTRACE(获取数目错误);} IDispatch *pDisp NULL;CComQIPtr IHTMLElement ret pDisp;for(long i0; inFormCount; i) { pDisp NULL;hr spElementCollection-item( CComVariant( i ), CComVariant(), pDisp ); if ( FAILED( hr ) ) {continue;}CComQIPtr IHTMLElement pElement pDisp;pDisp-Release();CComBSTR varRet;hr pElement-get_className(varRet);if (FAILED(hr)){continue;}if (varRet NULL){continue;}LPCTSTR lpName OLE2CT( varRet );if (std::wstring(lpName) className){ret pElement;break;}}return ret; } 以上就是模拟网页中获取网页状态的基本函数有了这几个函数网页模拟方式的基本框架基本都可以搭建起来了。
http://www.yutouwan.com/news/49592/

相关文章:

  • 国际购物网站网站app在线生成器
  • 网站开发规划书wordpress修改插件路径
  • 上海网站建设网页制作培训阿里云 发布网站 教程
  • 做汤的网站有哪些工作室做什么项目好
  • 网站转移动版网络查控系统设计方案
  • 电影网站制作模版新手如何做网站推广
  • 企业网站建设须知小型办公室中式装修
  • 网站建设新闻如何更新软文写作范文500字
  • 2013网站怎么备案wordpress+播放列表
  • 企业网站keywords最多几个企业网站模板中文
  • 运营公开网是什么网站同一个阿里云可以做两个网站
  • qq相册怎么制作网站黄岛做网站的公司
  • 网站开发技术课程设计报告html5网页设计工具
  • 怎么做秒赞网站手机cms建站系统
  • wordpress建立移动m站拼多多申请注册店铺
  • 小白建设论坛网站南通建设局网站
  • 软件设计说明书模板seo推广分析关键词的第一个步骤
  • 广西南宁房产网站建设网站建设规划与管理 试卷
  • 电子商务网站前台建设常用的技术有关于网站建设类似的文章
  • 网站最下端怎么做潍坊 营销型网站建设
  • wap网站源码苏州建网站公司
  • 厦门医院网站建设高清无线视频传输系统
  • 搬瓦工 做网站华贸中心网站谁做的
  • joomla适合做什么网站为什么网站数量减少
  • 做素食香料哪个网站买甘肃建设局网站首页
  • 平湖企业网站建设怎么做一个个人网站
  • 莆田 网站建设做网站要先申请域名吗
  • 四川住房城乡和城乡建设厅网站黄冈论坛百度贴吧
  • 郑州公路建设有限公司网站长沙互联网公司招聘
  • 江阴企业网站建设哪家好网站建设基础功能