CWebBrowser2中获得鼠标点击后的链接地址的方法

基于Playwright与反反爬技术的BOSS直聘数据爬取实战 本文将详细介绍如何使用Python最新技术栈(Playwright+Asyncio)构建一个高效、稳定的BOSS直聘数据爬虫系统。文章包含完整的技术选型分析、反爬机制破解方案、分布式爬虫架构设计以及数据处理存储方案,提供可直接运行的代码示例,并探讨爬虫开发中的法律与伦理问题。 阅读详情

 

在程序中添加 IE浏览器控件.并添加消息映射函数:
// 重载OnBeforeNavigate2()函数后,可以实现连接重定向
void CIE::OnBeforeNavigate2Explorer1( //该函数在HTML的连接前调用
  LPDISPATCH pDisp,
  VARIANT FAR* URL,     //准备浏览的URL,修改它可以实现转向
  VARIANT FAR* Flags,
  VARIANT FAR* TargetFrameName,
  VARIANT FAR* PostData,
  VARIANT FAR* Headers,
  BOOL FAR* Cancel)     //TRUE:停止 FALSE:继续
{
 CString sURL(URL->bstrVal);
 int id=sURL.ReverseFind('//');  //反向查找"/和/"
 if(id==-1) sURL.ReverseFind('/');

 try
 {
  if(sURL.Mid(id+1).CompareNoCase("ToDialog"))
   throw(0); //不是预定义的URL
  if(((PostData->vt) & (VT_VARIANT | VT_BYREF))==0)
   throw(0);
  VARIANT * v=PostData->pvarVal;
  if(((v->vt) & (VT_UI1 | VT_ARRAY))==0)
   throw(0);
  SAFEARRAY *pArr=v->parray;
  CString sData=(LPCSTR)pArr->pvData;  //至此,得到传送的数据流

  ////////////// 数据流的结构 //////////////
  // 变量1=值1&变量2=值2&......变量n=值n  //
  //////////////////////////////////////////

  CStringArray arrPart;
  while(TRUE)  //按照 '&' 进行拆分
  {
   id=sData.Find('&');
   if(id==-1){ arrPart.Add(sData); break; }
   arrPart.Add(sData.Left(id));
   sData=sData.Mid(id+1);
  }
  CString sResult;
  for(int nPart=0;nPart<arrPart.GetSize();nPart++)
  { //循环处理每个“变量=值”的部分
   CString sPart=arrPart.GetAt(nPart); //取出
   id=sPart.Find('=');
   ASSERT(id!=-1);
   CString sName = sPart.Left(id);  //变量名
   CString sValue= sPart.Mid(id+1); //值

   sName = WebStr2Str(sName);  //转换Web字符串到标准字符串
   sValue= WebStr2Str(sValue);

   sResult += sName+" = "+sValue+"<br>";
  }
  //////////// 以下是演示使用DHTML //////////////
  IHTMLDocument2 *pDoc=(IHTMLDocument2 *)m_ie.GetDocument();
  VARIANT *param;
  SAFEARRAY *sfArray;
  BSTR bstr = sResult.AllocSysString();
  sfArray = SafeArrayCreateVector(VT_VARIANT, 0, 1);
  if(sfArray && pDoc)
  {
   if(S_OK == SafeArrayAccessData(sfArray,(LPVOID*) & param))
   {
    param->vt = VT_BSTR;
    param->bstrVal = bstr;
    SafeArrayUnaccessData(sfArray);
    pDoc->write(sfArray);
   }
   SysFreeString(bstr);
   if (sfArray) SafeArrayDestroy(sfArray);
  }
  pDoc->Release();

  *Cancel=TRUE;
 }
 catch(...)
 {
  *Cancel=FALSE;
 }
}

CString CIE::WebStr2Str(LPCSTR lpBuf)
{
 int nLen;
 if(!lpBuf) nLen=0;
 else  nLen=::lstrlen(lpBuf);

 CString s; int i=0;
 while(i<nLen)
 {
  if(lpBuf[i]=='%')
  {
   BYTE c1=lpBuf[i+1];
   BYTE c2=lpBuf[i+2];
   i+=2;
   if(c1>='0' && c1<='9')  c1=(c1-'0')*16;
   else if(c1>='A' && c1<='Z') c1=(c1-'A'+10)*16;
   else if(c1>='a' && c1<='a') c1=(c1-'a'+10)*16;
   if(c2>='0' && c2<='9')  c2=c2-'0';
   else if(c2>='A' && c2<='Z') c2=c2-'A'+10;
   else if(c2>='a' && c2<='z') c2=c2-'a'+10;

   char szStr[2]; szStr[0]=c1+c2; szStr[1]=0;
   s+=szStr;
  }
  else if(lpBuf[i]=='+') s+=" ";
  else s+=CString(&lpBuf[i],1);
  i++;
 }
 return s;
}

在PreTranslateMessage(MSG* pMsg) 消息中增加:

 if ((pMsg->message == WM_LBUTTONDOWN) ) {
  CPoint point(pMsg->pt);
   
  ScreenToClient(&point); //
    
  IHTMLDocument2* pdoc2=NULL;
  IHTMLElement* pElement=NULL;
  IDispatch* pDisp=NULL;
  pDisp = m_ie.GetDocument();
  
  if (pDisp == NULL) return TRUE;
  
  pDisp->QueryInterface(IID_IHTMLDocument2,(void**)&pdoc2);
  pDisp->Release();
  
  if (pdoc2 == NULL) return TRUE;
  
// 在我的机器上Y坐标就得减30才取得的URL才正确的地址链接,此处可自行调用以获得准确URL
  pdoc2->elementFromPoint (point.x,point.y-30 ,&pElement);
  pdoc2->Release();
  if(pElement != NULL)
  {
   IHTMLAnchorElement  *pAnchor = NULL;
   pElement->QueryInterface(&pAnchor);
   if(pAnchor != NULL)   
   {
    BSTR bstrSrc;
    pAnchor->get_href(&bstrSrc);
    CString sHref(bstrSrc);  //转换获得的URL地址
     
   // AfxMessageBox("选择的链接为 : " + sHref);
    m_ie.Navigate (sHref, NULL, NULL, NULL, NULL);  // 打开获得的链接地址
      
    return TRUE;    // 在此处返回,以表示消息已经处理,否则打开的链接还会在新窗口中打开。
   }
   else
   AfxMessageBox ("取到的链接地址为空");
   
  }

 return COleControl::PreTranslateMessage(pMsg);

小论文/大论文必备 | RT-DETR目标检测、数据集增强 | 引入多种数据集增强方法,支持图像和标签同步扩充增强,助力小论文和大论文实验涨点策略,平均提升模型mAP约1-2个百分点 RT-DETR目标检测数据增强策略研究 ,本文针对RT-DETR目标检测模型提出9种数据增强方法,包括几何变换(水平/垂直翻转、中心裁剪)、光照调整(亮度、对比度)和噪声添加(高斯/椒盐噪声)等。所有增强操作均保持图像与标签同步变换,确保训练数据的准确性。实验表明,该策略可提升模型mAP 1-2个百分点,对小目标检测效果尤为显著。文中提供了完整的Python实现代码,支持批量处理图像和标签文件,并详细说明了各增强方法的功能特点。该方法通过提升数据多样性,有效增强了模型在复杂场景下的鲁棒性和泛化能力。 阅读详情

相关推荐

MFC对话框中实现网页显示功能详解

MFC(Microsoft Foundation Classes)是一套基于C++的面向对象类库,封装了Windows API,极大地简化了Windows桌面应用程序的开发流程。其核心架构围绕文档/视图模型、消息映射机制和UI组件封装展开,适用于中大型原生应用开发。ActiveX控件基于COM(组件对象模型)技术构建,具备高度可复用性与交互性,广泛用于嵌入网页内容或第三方功能模块。在MFC项目中集成ActiveX控件,如Web浏览器控件,可以实现原生应用与HTML内容的无缝融合。

weixin_36064575的博客 870

BeforeNavigate获得访问地址URL

点击网页中的一个链接时,会多次调用控件的BeforeNavigate2消息处理函数,我们怎么样才能在其中获取到我们所点击链接地址呢。 如果是基于web browser控件的开发,可以按如下方法实现: void CIEDialog::OnBeforeNavigate2Explorer1(LPDISPATCH pDisp, VARIANT FAR* URL, VARIANT FAR* Flag

mail_cm的专栏 1621

C++实现WebBrowser控件中获取鼠标点击事件和超链接

用一个基本窗口MFC程序实现WebBrowser控件对指定网页页面的加载、展示、点击事件响应,以及实现对鼠标在页面中点击标签事件的捕获,并且返回标签的超链接

Wonderware-InTouch 使用 Web 网页控件显示报表

intouch内部集成了很多非常有用的控件,里面包括了网页控件,可以通过嵌入这个控件去显示网页,不仅可以在线上网,也可以离线显示自己开发的网页画面和报表等,功能和使用,在这里简单的介绍下如何使用intouch自身的【网页】控件。 一、安装网页控件 如下图,在maker开发界面的“特别”菜单栏找到“配置”选项,再找到“向导/Active安装”选项,弹出控件选择窗口,进入“ActiveX控件安装”...

我就是我的博客 1万+

c iwebbrowser2 html,通过IWebBrowser2的Navigate2来打开网页,怎样判断网页是否全部加载完毕...

1)READYSTATE r;HRESULT hr = IWebBrowser2::get_ReadyState(&r);if (SUCCEEDED(hr) && r == READYSTATE_COMPLETE) {...}2)if (SUCCEEDED(IWebBrowser2::Stop()) {...}-------------------------Navigat...

weixin_33685133的博客 341

VC6.0 MFC中WebBrowser控件禁止新窗口弹出的解决办法

在百度上找了很多方法,没有一个能够完美的解决这个问题。 我在XP SP3上测试,WebBrowser的OnNewWindow3事件中处理是无效的,不知道人家说XP SP2有效是怎么回事。 那种创建一个隐藏窗口出来的办法,我个人反正是不愿意去用,总之感觉不太好,而且据说这是目前唯一的解决办法。   后来实在没办法了,只能往土办法去想了,我们知道IE中有状态栏这个东西,当鼠标指向某个链接时,状

Gnorth的专栏 4531

MFC控件(一)

<br />静态文本控件<br />设置控件文本:<br />1、使用属性窗口设置。<br />2、动态设置控件文本:调用CStatic的SetWindowText()方法<br />(注意:控件ID不能是默认的IDC_STATIC,需修改,不修改不能在类向导中显示,则不能为静态文本控件关联变量)<br />响应鼠标单击事件:<br />1、更改静态文本ID,不可为默认。<br />2、将静态文本控件Styles设置为:Notify<br />3、通过类向导添加鼠标单击事件。<br />示例:实现了单击静态

5793

MFC在2024年的实用价值:从原理到实战的Windows GUI编程指南

Windows GUI编程是桌面应用开发的基础领域,其核心在于理解操作系统提供的原生API与消息驱动机制。MFC(Microsoft Foundation Classes)作为一套经典的C++类库,通过面向对象方式封装了底层的Win32 API,将窗口创建、消息处理、图形绘制等复杂操作抽象为CView、CDocument等类,显著降低了开发原生Windows应用的复杂度。这一技术价值在于它提供了对Windows生态的深度访问能力,尤其适合需要开发轻量、高效、无依赖原生工具的场景。在工业控制、金融、医疗等领域

weixin_30247781的博客 360

通过webbrowser获取网页中的超链接地址

c#通过webbrowser获取网页中的超链接地址[新浪ViVi] [百度搜藏] [QQ书签][作者:佚名 | 点击数:1075 | 时间:2010-2-1]【大 中 小】代码如下string link_url = webBrowser1.Document.Links[1].GetAttribute("href");webBrowser1:一个webbrowser实例webBrowser1.Document:实例中出现的文档webBrowser1.Document.Links[1]:该文档中超链接集合中的第

wq1282的专栏 8433

C#点击打开webbrowser中网页中的超链接

<br />今天写一个程序需要到使用这个.上网查了一晚上的资料, 分享一下自己的代码<br /> <br />共使用了两种种方法实现:<br />1:使用webbrowser的 links方法<br /> <br />            //if (webBrowser1.Document != null)<br />            //{<br />            //    int j = webBrowser1.Document.Links.Count;<br />        

jianbin1062的专栏 6216

常用获取url地址的几种方法

1、设置或获取整个 URL 为字符串 window.location.href 2、设置或获取 URL 的协议部分 window.location.protocol 3、设置或获取 URL 的主机部分 window.location.host 4、设置或获取与 URL 关联的端口号码 window.location.port 5、设置或获取与 URL 的路径部分(就是文件地址) window.location.pathname 6、设置或获取 href 属性中跟在问号后面的部分 window.locatio

weixin_45821809的博客 4万+

通过IWebBrowser2的Navigate2来打开网页,怎样判断网页是否全部加载完毕

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 1)READYSTATE r; HRESULT hr = IWebBrowser2::g

rundll64的专栏 3838

获取IE (控件)的所有链接(包括Frameset, iframe)

 IE 顶层 body 节点通过IHTMLElement->get_all 方法无法获取iframe 里面的节点列表 CComPtrIHTMLElement> body; CComPtrIDispatch> spDispCollection;body->get_all(&spDispCollection);所以要获取iframe/frame(frameset) 里面的节点列表的话, 则

Jinhill's Blog 1875

如何让 WebBrowser控件 使用BeforeNavigate2(...)屏蔽特定页面

这是俺提问的一个帖子,如下:norsd等级:可用分等级:贫农总技术分:932总技术分排名:20992结帖率:100.00%BeforeNavigate2(...) 中的参数 *Cancel=VARIANT_TRUE, 取消导航后,无法使页面Complete 我打开一个页面A,页面A中有frame(B,C,D), 然后会多次BeforeNavigate2,

norsd的专栏 9724

C# 网络编程之webBrowser获取网页url和下载网页中图片

该文章主要是通过C#网络编程的webBrowser获取网页中的url并简单的尝试瞎子啊网页中的图片,主要是为以后网络开发的基础学习.其中主要的通过应用程序结合网页知识、正则表达式实现浏览、获取url、下载图片三个功能.而且很清晰的解析了每一步都是以前一步为基础实现的. 一.界面设计 界面设计如下图所示,添加控件如图,设置webBrowser1其Anchor属性为Top、Bottom、Left、...

ithome 1127

Microsoft Web Browser控件的常用功能

  微软的Web Browse控件使用方法,选择菜单 Project -> Add to Project -> Components and controls…,在弹出的对话框中选择Registered ActiveX Controls文件夹,然后选中列表中的Microfost Web 浏览控件。或者编辑对话框资源时,右键单击选择Insert ActiveX控件选项,也可以在列表中选择该控件

Huuyoo的专栏 4133

Can标准ISO11898-2-中文

压缩包内容:ISO 11898-2中文.pdf想学习CAN总线的童鞋可以下载学习。

上一篇: windows下不规则窗体创建的几种方法
下一篇: 进程隐藏
snz
snz
博客等级 码龄25年 30粉丝 48原创
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值