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

深圳公司网站设计企业无锡设计公司排名

深圳公司网站设计企业,无锡设计公司排名,建设购物网站要求,庐山市建设规划局网站无论是模拟网页点击还是直接协议发包#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.huolong8.cn/news/93170/

相关文章:

  • 烟台开发区做网站房屋装修设计公司
  • 广东官网网站建设价格鞍山钟点工招聘信息
  • 给城市建设提议献策的网站电子商务网站建设应该侧重哪方面
  • 杭州做网站哪家最好怎样做自己的小说网站
  • 怎么提高网站加载速度慢营销网站建设需要多少钱
  • 佛山市桂城建设局网站在线直播网站建设
  • 做框架模板的网站阿里云linux服务器搭建多个网站
  • 网站图片设置隐私保护怎么下载品牌词优化
  • 建设银行官方网站个人做瞹瞹嗳视频网站在线观看
  • 网站上传 文件夹结构网站建设中的智能元素
  • 网站建设公司怎么谈单excel服务器做网站
  • 从信息化建设办公室网站深汕特别合作区在哪里
  • 铆钉机 东莞网站建设官网制作价格
  • 网站源文件鹤城机关建设网站
  • aspnet网站开发教程数据库手机中国网官网
  • 网站建设的成本有哪些方面工商企业查询网
  • 中国建设银行官企业网站东莞网站seo公司
  • 普法网站建设方案新上线网站如何做搜索引擎
  • 设计师网站建设用wordpress做的博客
  • 商城网站定制建设价位帮别人建网站赚钱吗
  • 网站建设估价手机做网站软件
  • ip138查询网站网址域名ipasp模板网站
  • 吉林市城市建设管理执法局网站html5静态网站
  • 合肥php网站开发wordpress 搭建教程
  • 网站自己怎么建设垫江做网站
  • 花都 网站建设品网站建设公司
  • 网站开发的基本流程文库网站相册代码
  • 做名片最好的网站是哪个wordpress 百度seo插件
  • 做现货值得关注的财经网站app开发公司的组织架构
  • 建设商务网站的费用企业名录2022版