webbrowser自动提交以后不能正确显示跳转的页面

niceday17 2010-10-08 08:52:51
本人想做一个winform的自动截图程序.
但是在利用webbrowser做自动登录出现了问题.
问题描述:利用webbrowser自动填写并提交表单,但在webbrowser的窗口上却看不到表单提交以后希望的页面。

比如,创建了一个webbreowser对象MyBrowser,然后Navigate一个需要权限的url1,它会自动跳转到登录页面url2。这个时候调用自动填写提交的方法,就可以开发到我访问的url1。最后,调用截图方法截图。

通过断点调试可以我可以截取到我期望的图片,但是不设置断点的话,调试运行就会不停的重复Application.DoEvents();和MyBrowser_DocumentCompleted方法。请问这是什么问题。


部分代码如下:
private void MyBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
SetLoginParams(this.URL);//自动提交的方法
}

public void GetIt()
{
MyBrowser.ScriptErrorsSuppressed = true;
MyBrowser.Navigate(this.URL);
MyBrowser.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(MyBrowser_DocumentCompleted);
while (MyBrowser.ReadyState != WebBrowserReadyState.Complete)
{
Application.DoEvents();
}
}
...全文
341 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
niceday17 2010-10-08
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 zp19900704 的回复:]
while (MyBrowser.ReadyState != WebBrowserReadyState.Complete)
{
Application.DoEvents();
} 去掉看看
[/Quote]

这样也不行...
webbrowser通过Application.DoEvents()来初始化.
去掉的话,
MyBrowser.ReadyState = Uninitialized
niceday17 2010-10-08
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 zp19900704 的回复:]
所以判断触发事件url是不是webbrowser的当前url 也就是你Navigate的url
[/Quote]

现在的情况是:

我navigate的url假设是A.需要权限登录以后才能访问;
执行完自动提交表单之后,webbrowser.url 却是B,是那个登陆页面.
很明显 webbrowser.url的值不是我期望的A
zp19900704 2010-10-08
  • 打赏
  • 举报
回复
while (MyBrowser.ReadyState != WebBrowserReadyState.Complete)
{
Application.DoEvents();
} 去掉看看
niceday17 2010-10-08
  • 打赏
  • 举报
回复
不行呀.
依然是原来的问题.单步调试能够截取到我期望访问得页面.
不然截取出来的还是权限登录表单页面.
zp19900704 2010-10-08
  • 打赏
  • 举报
回复
webbrowser Navigate之后会执行2次DocumentCompleted
进入事件后分别是 ReadyState 会有Intercative和Complete这2种状态

Complete=该控件已完成新文档及其所有内容的加载;Interactive=该控件已经加载足够的文档以允许有限的用户交互,比如单击已显示的超链接。所以DocumentCompleted事件会在Interactive状态和Complete状态各调用一次

而e.url的意思是 如果你Navigate的页面包含了框架ifream 则ifream中也会触发DocumentCompleted事件 所以判断触发事件url是不是webbrowser的当前url 也就是你Navigate的url
niceday17 2010-10-08
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zp19900704 的回复:]
private void wb_DocumentCompletedTwo(object sender, WebBrowserDocumentCompletedEventArgs e)
{
if (wb.ReadyState != WebBrowserReadyState.Complete)
return;
if (e.Url.ToString() != wb.Url.ToStrin……
[/Quote]
不是很明白,在什么地方执行这段代码呢?
wuyq11 2010-10-08
  • 打赏
  • 举报
回复
MyBrowser.DocumentCompleted 中
while (MyBrowser.ReadyState != WebBrowserReadyState.Complete)
{
Application.DoEvents();
}
http://topic.csdn.net/u/20090702/11/845f5ac5-48f2-463a-8271-47c5eeb33cab.html
zp19900704 2010-10-08
  • 打赏
  • 举报
回复
private void wb_DocumentCompletedTwo(object sender, WebBrowserDocumentCompletedEventArgs e)
{
if (wb.ReadyState != WebBrowserReadyState.Complete)
return;
if (e.Url.ToString() != wb.Url.ToString())
return;
//事件处理代码
wb.DocumentCompleted -= new WebBrowserDocumentCompletedEventHandler(wb_DocumentCompletedTwo);
}
zp19900704 2010-10-08
  • 打赏
  • 举报
回复
private void wb_DocumentCompletedTwo(object sender, WebBrowserDocumentCompletedEventArgs e)
{
if (wb.ReadyState != WebBrowserReadyState.Complete)
return;
if (e.Url.ToString() != wb.Url.ToString())
return;

wb.DocumentCompleted -= new WebBrowserDocumentCompletedEventHandler(wb_DocumentCompletedTwo);
}
無名小伙 2010-10-08
  • 打赏
  • 举报
回复
顶。。。这个应该不是webbrowser的问题吧
niceday17 2010-10-08
  • 打赏
  • 举报
回复
一个webbrowser对象是不是只支持一套session?
为什么我前台的权限访问页面打开了.但是后台的权限访问页面就打不开.
如果后台的页面访问到了,前台的权限访问页面就打不开.
niceday17 2010-10-08
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 zp19900704 的回复:]
先navigate登录的页面 然后输入登录信息 触发登录按钮事件后
再navigate你想要到达的页面
是不是这样的顺序呢?
[/Quote]
嗯 对.
zp19900704 2010-10-08
  • 打赏
  • 举报
回复
先navigate登录的页面 然后输入登录信息 触发登录按钮事件后
再navigate你想要到达的页面
是不是这样的顺序呢?
内容概要:本文围绕“面向高精度电流控制的PMSM多参数PSO辨识模型研究”,系统阐述了基于Simulink的永磁同步电机(PMSM)多参数辨识方法,重点采用粒子群优化算法(PSO)实现对电机关键内部参数的高精度辨识。研究构建了完整的PMSM控制系统仿真模型,结合智能优化算法,解决了传统参数辨识中精度低、收敛慢的问题,有效提升了电流环控制的动态性能与稳态精度。该方法特别适用于对控制精度和响应速度要求较高的工业应用场景,如高性能伺服系统、电动汽车驱动系统等,具有较强的工程实用价值和科研参考意义。文中提供了完整的Simulink仿真模型与配套代码,确保了研究内容的可复现性和实践操作性。; 适合人群:具备电机控制、自动化或电气工程等相关专业背景,熟悉MATLAB/Simulink仿真环境,从事电机驱动系统研发、控制算法设计或相关领域科研工作的工程师及研究生,尤其适合工作1-5年、希望深入理解先进参数辨识技术的研发人员。; 使用场景及目标:①开展高精度PMSM控制系统的设计与参数辨识研究;②学习并掌握PSO等智能优化算法在电机系统参数辨识中的具体实现与调优技巧;③完成学术论文复现、科研项目验证、毕业设计或工程原型开发,提升对现代电机控制核心技术的理解与应用能力。; 阅读建议:建议读者结合提供的Simulink模型与源代码进行动手实践,按照文档逻辑逐步搭建与调试仿真系统,重点关注PSO算法与电机模型的交互机制、目标函数设计及参数收敛过程,通过对比不同工况下的辨识结果,深入理解算法性能与控制精度之间的内在联系。

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧