求vb.net桌面程序代码,在有框架的网页中填写文本框

清溢 2019-10-04 06:32:50
最近用VB.NET,通过内嵌 WebBrowser1制作了一个浏览器桌面程序。

通过 WebBrowser1.Document.All(TextBox2.Text).SetAttribute("value", TextBox3.Text) 这段代码,可以实现对简单网页中的文本框进行填写的功能。比如,百度的搜索框,有些系统的登录页面。

TextBox2文本框中输入网页中需要赋值的Text文本框的名称,在TextBox3文本框中输入要填赋的值,点击按钮运行上面的代码,就能填写网页中的文本框。

但是,在一些复杂的有框架 iframe 的页面中,这个代码就没有办法使用了,出现如下错误提示



这是详细的错误信息:


有关调用实时(JIT)调试而不是此对话框的详细信息,
请参见此消息的结尾。

************** 异常文本 **************
System.NullReferenceException: 未将对象引用设置到对象的实例。
在 WindowsApp3定向填表.Form1.Button2_Click(Object sender, EventArgs e)
在 System.Windows.Forms.Control.OnClick(EventArgs e)
在 System.Windows.Forms.Button.OnClick(EventArgs e)
在 System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
在 System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
在 System.Windows.Forms.Control.WndProc(Message& m)
在 System.Windows.Forms.ButtonBase.WndProc(Message& m)
在 System.Windows.Forms.Button.WndProc(Message& m)
在 System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
在 System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
在 System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)


************** 已加载的程序集 **************
mscorlib
程序集版本: 2.0.0.0
Win32 版本: 2.0.50727.8793 (QFE.050727-8700)
基本代码: file:///C:/Windows/Microsoft.NET/Framework/v2.0.50727/mscorlib.dll
----------------------------------------
WindowsApp3定向填表
程序集版本: 1.0.0.0
Win32 版本: 1.0.0.0
基本代码: file:///C:/Users/222222/Desktop/11111/tianbiao.exe
----------------------------------------
Microsoft.VisualBasic
程序集版本: 8.0.0.0
Win32 版本: 8.0.50727.5483 (Win7SP1GDR.050727-5400)
基本代码: file:///C:/Windows/assembly/GAC_MSIL/Microsoft.VisualBasic/8.0.0.0__b03f5f7f11d50a3a/Microsoft.VisualBasic.dll
----------------------------------------
System
程序集版本: 2.0.0.0
Win32 版本: 2.0.50727.8791 (QFE.050727-8700)
基本代码: file:///C:/Windows/assembly/GAC_MSIL/System/2.0.0.0__b77a5c561934e089/System.dll
----------------------------------------
System.Windows.Forms
程序集版本: 2.0.0.0
Win32 版本: 2.0.50727.5491 (Win7SP1GDR.050727-5400)
基本代码: file:///C:/Windows/assembly/GAC_MSIL/System.Windows.Forms/2.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
----------------------------------------
System.Drawing
程序集版本: 2.0.0.0
Win32 版本: 2.0.50727.5495 (Win7SP1GDR.050727-5400)
基本代码: file:///C:/Windows/assembly/GAC_MSIL/System.Drawing/2.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
----------------------------------------
System.Runtime.Remoting
程序集版本: 2.0.0.0
Win32 版本: 2.0.50727.8771 (QFE.050727-8700)
基本代码: file:///C:/Windows/assembly/GAC_MSIL/System.Runtime.Remoting/2.0.0.0__b77a5c561934e089/System.Runtime.Remoting.dll
----------------------------------------
Microsoft.mshtml
程序集版本: 7.0.3300.0
Win32 版本: 7.0.3300.0
基本代码: file:///C:/Windows/assembly/GAC/Microsoft.mshtml/7.0.3300.0__b03f5f7f11d50a3a/Microsoft.mshtml.dll
----------------------------------------
mscorlib.resources
程序集版本: 2.0.0.0
Win32 版本: 2.0.50727.8793 (QFE.050727-8700)
基本代码: file:///C:/Windows/Microsoft.NET/Framework/v2.0.50727/mscorlib.dll
----------------------------------------
System.Windows.Forms.resources
程序集版本: 2.0.0.0
Win32 版本: 2.0.50727.5420 (Win7SP1.050727-5400)
基本代码: file:///C:/Windows/assembly/GAC_MSIL/System.Windows.Forms.resources/2.0.0.0_zh-CHS_b77a5c561934e089/System.Windows.Forms.resources.dll
----------------------------------------
System.Xml
程序集版本: 2.0.0.0
Win32 版本: 2.0.50727.8773 (QFE.050727-8700)
基本代码: file:///C:/Windows/assembly/GAC_MSIL/System.Xml/2.0.0.0__b77a5c561934e089/System.Xml.dll
----------------------------------------

************** JIT 调试 **************
要启用实时(JIT)调试,
该应用程序或计算机的 .config 文件(machine.config)的 system.windows.forms 节中必须设置
jitDebugging 值。
编译应用程序时还必须启用
调试。

例如:

<configuration>

请各位指点一下,代码应该怎么写呢,谢谢啦。我这个技术小白学VB.NET真是困难,网上好多类似代码都是VB6的,还请各位老师多多指教
...全文
290 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
清溢 2019-11-03
  • 打赏
  • 举报
回复
太好啦,谢谢FainSheeg老师啊,我赶紧试试这个办法。

再次谢谢FainSheeg老师

引用 11 楼 FainSheeg 的回复:
定位方法如2L所说:webBrowser1.Document.Window.Frames[0].Document.GetElementById("id").SetAttribute("value", "")
有多个frame的把Frames[0]里面的0改成相应的索引号。
frame里面又有frame的:webBrowser1.Document.Window.Frames[0].Document.Window.Frames[0].Document.GetElementById("id").SetAttribute("value", "") 无非是多嵌套几层罢了。

FainSheeg
FainSheeg 2019-10-28
  • 打赏
  • 举报
回复
定位方法如2L所说:webBrowser1.Document.Window.Frames[0].Document.GetElementById("id").SetAttribute("value", "")
有多个frame的把Frames[0]里面的0改成相应的索引号。
frame里面又有frame的:webBrowser1.Document.Window.Frames[0].Document.Window.Frames[0].Document.GetElementById("id").SetAttribute("value", "") 无非是多嵌套几层罢了。
紫妍泪 2019-10-25
  • 打赏
  • 举报
回复
你这个跟我出错的很像唉,我一般是代码写循环了,系统反应不过来崩了
清溢 2019-10-22
  • 打赏
  • 举报
回复
最近家里有点事,没顾上看帖子,不好意思啊。现在没法逐一回复各位老师啦,不知道是不是因为过了那个时间了?

谢谢asq985老师啊,我后来看了看网页,我说的那个网页里有好多个框架,而且还有一层框架里边还有框架,不知道怎么用这个语句webBrowser1.Document.Window.Frames[0].Document.GetElementById("id").SetAttribute("value", "") ?

谢谢zj_zwl老师,我用的这个网页只针对IE的,cefsharp不知道合适不合适,哈哈,主要我不太会用。

谢谢it_gz_xi老师,我看了,确实有VALUE属性的。

谢谢FainSheeg老师,你说必须先定位iframe,不知道具体语句怎么实现呢?或者给个链接让我学习学习,哈哈,谢谢啦


FainSheeg 2019-10-08
  • 打赏
  • 举报
回复
有iframe的网页要定位到框架里的元素必须先定位iframe,直接按元素定位是找不到的。
it_gz_xi 2019-10-07
  • 打赏
  • 举报
回复
自己调试一下即可,看看Document里面是否有TextBox2.Text这个对象,再说不是所有对象都有value属性的哦
zj_zwl 2019-10-07
  • 打赏
  • 举报
回复
如果跨域就不好搞了,cefsharp肯定是可以的
清溢 2019-10-06
  • 打赏
  • 举报
回复
引用 2 楼 asq985的回复:
webBrowser1.Document.Window.Frames[0].Document.GetElementById("id").SetAttribute("value", "");
谢谢adp985老师的答疑啊,我去试试
清溢 2019-10-06
  • 打赏
  • 举报
回复
引用 1 楼 caozhy的回复:
加点延迟,看看是不是网页输入框还没有来得及加载就执行了
我是等网页打开后,才点击按键运行代码,代码就那一句话
阿蒙Amon 2019-10-06
  • 打赏
  • 举报
回复
明显button2的click事件中出错了,你使用了为空的对象。
asq985 2019-10-06
  • 打赏
  • 举报
回复
webBrowser1.Document.Window.Frames[0].Document.GetElementById("id").SetAttribute("value", "");
threenewbee 2019-10-05
  • 打赏
  • 举报
回复
加点延迟,看看是不是网页输入框还没有来得及加载就执行了

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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