我的项目需要分析网页内容,采用webbrowser控件来模拟一些网页操作的动作(填,提交表单等)。1,所有的分析,都必须在webbrowser加载完毕后才能进行操作。
2,webbrowser是放在主线程里的。
3,任务很多的时候,比如我有10个网址需要处理,就必须依次处理这10个任务,很慢。假想:
1,在主线程多放几个webbrowser控件,来执行多个任务,但其实还是在主线程里同步实行的,所以效率也提高不了多少。
而且,流程控制起来很混乱(我用定时器来实现的)。
2,用POST的方法,但目前找不到提交参数的,暂时不考虑
3,是用多线程来实现,比如我在另外一个线程里创建一个对话框,这个对话框又包括一个webbrowser控件,如果能实际运行,那么每个单独线程都可以独立解决任务了。可是在另外线程的对话框,无法运行,会产生错误,是因为webbrowser控件的缘故。问题就在这里,是不是webbrowser控件是无法在主线程之外的线程创建的?(或者说是运行)有什么解决的办法?
4,如果采用多进程可以吗?
2,webbrowser是放在主线程里的。
3,任务很多的时候,比如我有10个网址需要处理,就必须依次处理这10个任务,很慢。假想:
1,在主线程多放几个webbrowser控件,来执行多个任务,但其实还是在主线程里同步实行的,所以效率也提高不了多少。
而且,流程控制起来很混乱(我用定时器来实现的)。
2,用POST的方法,但目前找不到提交参数的,暂时不考虑
3,是用多线程来实现,比如我在另外一个线程里创建一个对话框,这个对话框又包括一个webbrowser控件,如果能实际运行,那么每个单独线程都可以独立解决任务了。可是在另外线程的对话框,无法运行,会产生错误,是因为webbrowser控件的缘故。问题就在这里,是不是webbrowser控件是无法在主线程之外的线程创建的?(或者说是运行)有什么解决的办法?
4,如果采用多进程可以吗?
CoInitialize(NULL);CoUninitialize();
{
CoInitialize(NULL);
CWebDlg dlg;//这是一个对话框,对话框里包含一个webbrowser控件
dlg.DoModal();
CoUninitialize(); return 0;
}void OnButton()
{
_beginthreadex(0,0,&mythread,this,0,0);
}
这样不行
void OnButton()
{
CWebDlg dlg;
dlg.Domodal();
}就可以
可以用抓包工具看看