如何获取WebBrowse 网页上的控件坐标

时间:2021-01-07 23:13:54
网页代码如下

            </tr>
                    <tr>
                      <td width="35%" align="right"><li>帐&nbsp;&nbsp;&nbsp;&nbsp;号:</li></td>
                      <td align="left"><input type="text" name="username" size="15" class="za_text"></td>
                    </tr>
                    <tr>
                      <td align="right"><li>密&nbsp;&nbsp;&nbsp;&nbsp;码:</li></td>
                      <td align="left"><input type="password" name="passwd" size="15" class="za_text"> </td>
                    </tr>
                    <tr>
                      <td height="27" align="right">&nbsp;</td>
                      <td align="left"><input type="submit" value="确定" class="za_text" ></td>
                    </tr>
          </form>
          </table>

问如何获取 帐号、密码及提交 按钮的名称及坐标

16 个解决方案

#1


up

#2


我也想知道,
帮顶

#3


不知道你要這個坐標有什麼用!


如果想自動填表之類根本用不著去理會它的坐標啊。

#4


网页的源码不能读取,可能由于不能读源码,所以也不能用IHTMLDocument2及IHTMLElementCollection;
WebBrowse.Document.All.Item('控件ID',0).Value := 'AAa';
之类的来提交表单。我在网上查了很多资料,也不能用。类似以下的:
  var   
      doc   :   IHTMLDocument2;   
      all   :   IHTMLElementCollection;   
      len,i   :   integer;   
      item   :   OleVariant;   
      HtmlInputEle   :   IHTMLInputElement;   
      SubmitBtn   :   IHTMLButtonElement;   
      spDisp   :   IDispatch;   
  begin   
      if   WebBrowser1.Document   <>   nil   then   
          begin   
              doc:=WebBrowser1.Document   as   IHTMLDocument2;   
              all:=doc.all;   
              len:=all.Length;   
              for   i:=0   to   len-1   do   
                  begin   
                      spDisp:=all.item(i,varEmpty);   
                      if   SUCCEEDED(spDisp.QueryInterface(IHTMLInputElement   ,HtmlInputEle))   then   
                          begin   
                              if   HTMlInputEle.name   =   'UserID'   then   
                                  HtmlInputEle.value   :=   'test';   
                              if   HTMlInputEle.name   =   'Passwd'   then   
                                  HtmlInputEle.value   :=   'test';   
                          end;   
                      if   SUCCEEDED(spDisp.QueryInterface(IHTMLButtonElement   ,SubmitBtn))   then   
                          if   SubmitBtn.name   =   'submitButtonName'   then   
                              SubmitBtn.click();   
                  end;   
          end;   
  end; 

#5


以上的网页代码我是用Sniffer截包软件截到的。

#6


可能是那个表单在一个frame中,所以你没法直接读取网页源码进而对表单进行操作.
如果是这样,建议你直接用WebBrowser打开那个frame所指向的网页.

#7


學習並關注

#8


你要找的那个网页应该会是这样<iframe id="frameAAAA" src="src.html">somehtml</iframe>
你截取到得应该是src.html中的内容,你可以用控制iframe内的元素来控制src.html中的内容,如果还能解决可以联系我QQ:594529009

#9


正如六樓說的大概你所要操作的表格是在框架頁中

直接操作框架頁內容用它嘗試
wb1.OleObject.document.documentelement.document.frames.item(0).document.getElementsByTagName('input').item(0).value :='你的內容';

注:
其中frames.item(0)中的零就表示你在網頁源代碼中看到的第一個frame,
後面的類推,getElementsByTagName('input').item(0).value 這個內容也有多種寫法,可以查考下面的鏈接

關於自動填表及提交表單可以查考下面內容
http://hi.baidu.com/szba/blog/item/9a0e5c1eed0431fc1bd57697.html




引用 6 楼 chys3584 的回复:
可能是那个表单在一个frame中,所以你没法直接读取网页源码进而对表单进行操作. 
如果是这样,建议你直接用WebBrowser打开那个frame所指向的网页.

#10


我把网址贴出来,请大家帮我看一看
www.ra8888.com

#11


自己多做嘗試

一句話就行了。還要出來問嗎?

webbrowser1.OleObject.document.documentelement.document.frames.item(1).document.item('username').value :='username'; 

大概JS控制框架不允許跳出框架獨立作用所以就只能用上面的代碼,或者直接把表單保存到本址直接提交本地表單。

<html>
<HEAD><TITLE>Welcome</TITLE><!--<title>Welcome</title>--> 
<META http-equiv=Content-Type content="text/html; charset=big5"></HEAD><FRAMESET border=0 frameSpacing=0 rows=*,0,0 frameBorder=NO><FRAME name=SI2_mem_index src="app/member/"><FRAME name=SI2_func src="./ok.html" noResize scrolling=no></FRAMESET>
</html>



#12


我尝试了还是不行,我用的是DELPHI 7 + EmbeddedWB

提示 Method 'item' not supported by automation object.

#13


如果你明白這句話的具體意義嘗試是絕對不會失敗的

已給你測試通過

procedure TForm1.FormCreate(Sender: TObject);
begin
wb.Go('www.ra8888.com');
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
   wb.OleObject.document.documentelement.document.frames.item(0).document.all.item('username').value :='你的內容';
end;

end.

#14


坐标是可以获取到的,自带的一个属性可以搞定。我对webborwser比较熟悉。

#15


To:devhp 多谢你的指教,我是初次接触WebBrowse 的,所以很多东面都不是很了解。

再向mwy654321 请教,如果我想取网页上的指定元素的坐标,要取那个属性呢。

原以为 CSDN 的 Delphi 已人气溃散了,估不到在这里还可以得到各位大师的赐教,多谢各位。

#16


路过 学习 

#1


up

#2


我也想知道,
帮顶

#3


不知道你要這個坐標有什麼用!


如果想自動填表之類根本用不著去理會它的坐標啊。

#4


网页的源码不能读取,可能由于不能读源码,所以也不能用IHTMLDocument2及IHTMLElementCollection;
WebBrowse.Document.All.Item('控件ID',0).Value := 'AAa';
之类的来提交表单。我在网上查了很多资料,也不能用。类似以下的:
  var   
      doc   :   IHTMLDocument2;   
      all   :   IHTMLElementCollection;   
      len,i   :   integer;   
      item   :   OleVariant;   
      HtmlInputEle   :   IHTMLInputElement;   
      SubmitBtn   :   IHTMLButtonElement;   
      spDisp   :   IDispatch;   
  begin   
      if   WebBrowser1.Document   <>   nil   then   
          begin   
              doc:=WebBrowser1.Document   as   IHTMLDocument2;   
              all:=doc.all;   
              len:=all.Length;   
              for   i:=0   to   len-1   do   
                  begin   
                      spDisp:=all.item(i,varEmpty);   
                      if   SUCCEEDED(spDisp.QueryInterface(IHTMLInputElement   ,HtmlInputEle))   then   
                          begin   
                              if   HTMlInputEle.name   =   'UserID'   then   
                                  HtmlInputEle.value   :=   'test';   
                              if   HTMlInputEle.name   =   'Passwd'   then   
                                  HtmlInputEle.value   :=   'test';   
                          end;   
                      if   SUCCEEDED(spDisp.QueryInterface(IHTMLButtonElement   ,SubmitBtn))   then   
                          if   SubmitBtn.name   =   'submitButtonName'   then   
                              SubmitBtn.click();   
                  end;   
          end;   
  end; 

#5


以上的网页代码我是用Sniffer截包软件截到的。

#6


可能是那个表单在一个frame中,所以你没法直接读取网页源码进而对表单进行操作.
如果是这样,建议你直接用WebBrowser打开那个frame所指向的网页.

#7


學習並關注

#8


你要找的那个网页应该会是这样<iframe id="frameAAAA" src="src.html">somehtml</iframe>
你截取到得应该是src.html中的内容,你可以用控制iframe内的元素来控制src.html中的内容,如果还能解决可以联系我QQ:594529009

#9


正如六樓說的大概你所要操作的表格是在框架頁中

直接操作框架頁內容用它嘗試
wb1.OleObject.document.documentelement.document.frames.item(0).document.getElementsByTagName('input').item(0).value :='你的內容';

注:
其中frames.item(0)中的零就表示你在網頁源代碼中看到的第一個frame,
後面的類推,getElementsByTagName('input').item(0).value 這個內容也有多種寫法,可以查考下面的鏈接

關於自動填表及提交表單可以查考下面內容
http://hi.baidu.com/szba/blog/item/9a0e5c1eed0431fc1bd57697.html




引用 6 楼 chys3584 的回复:
可能是那个表单在一个frame中,所以你没法直接读取网页源码进而对表单进行操作. 
如果是这样,建议你直接用WebBrowser打开那个frame所指向的网页.

#10


我把网址贴出来,请大家帮我看一看
www.ra8888.com

#11


自己多做嘗試

一句話就行了。還要出來問嗎?

webbrowser1.OleObject.document.documentelement.document.frames.item(1).document.item('username').value :='username'; 

大概JS控制框架不允許跳出框架獨立作用所以就只能用上面的代碼,或者直接把表單保存到本址直接提交本地表單。

<html>
<HEAD><TITLE>Welcome</TITLE><!--<title>Welcome</title>--> 
<META http-equiv=Content-Type content="text/html; charset=big5"></HEAD><FRAMESET border=0 frameSpacing=0 rows=*,0,0 frameBorder=NO><FRAME name=SI2_mem_index src="app/member/"><FRAME name=SI2_func src="./ok.html" noResize scrolling=no></FRAMESET>
</html>



#12


我尝试了还是不行,我用的是DELPHI 7 + EmbeddedWB

提示 Method 'item' not supported by automation object.

#13


如果你明白這句話的具體意義嘗試是絕對不會失敗的

已給你測試通過

procedure TForm1.FormCreate(Sender: TObject);
begin
wb.Go('www.ra8888.com');
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
   wb.OleObject.document.documentelement.document.frames.item(0).document.all.item('username').value :='你的內容';
end;

end.

#14


坐标是可以获取到的,自带的一个属性可以搞定。我对webborwser比较熟悉。

#15


To:devhp 多谢你的指教,我是初次接触WebBrowse 的,所以很多东面都不是很了解。

再向mwy654321 请教,如果我想取网页上的指定元素的坐标,要取那个属性呢。

原以为 CSDN 的 Delphi 已人气溃散了,估不到在这里还可以得到各位大师的赐教,多谢各位。

#16


路过 学习