问题是这样,发贴的页面是A页面,文章列表在B页面,文章发表(A)之后自动转入文章列表(B)。如同目前大多数网站的做法。我的发贴机发了第一篇之后进入了文章列表页面(B页面),这时候为了发第二篇,我必须使页面回到发贴页面(A页面)。这个时候我不知道该怎么回了。下面是我的思路。方法1 点击B页面上的发贴按钮。但发贴按钮是个链接,我不知道用WebBrowser怎么点击链接。这个没去试。顺便请教如何点击指定的链接方法2:在进入文章列表(B页面)之后我使用 WebBrowser1.GoBack; 企图通过go back回到A页面,但是时间上很难控制,不知道究竟有没有已经进入A,要多长时间进入A。所以在实际执行上总是出错。代码如下,见红色注释//WebBrowser1.oleobject.document.Forms.Item(0, 0).submit;         //这三行就是点击发贴按钮。
     { //或者用指定表单名称提交
        o :=WebBrowser.oleobject.document.all.item('post',0);
        o.Click; //点击操作,对其它对象也可同样操作
     }
//这里已经进入了B页面
    sleep(20000); //为了给B页面足够载入时间,我停留了20秒。
     WebBrowser1.GoBack; //企图回到A
      sleep(20000); //给A足够的载入时间但是还是因为A未能如期载入(20秒我认为足够)导致发第三篇的时候未能找到正确的输入框。各位,有好方法赶紧教我。

解决方案 »

  1.   

    如果使用WebBrowser1.navigate(发贴页面)的话,我login的session又无法保留,导致必须重新登陆一次,更加麻烦
      

  2.   

    先給你個連接!其實我發現很多的朋友都會遇到這些問題解決你第一個問題
    http://hi.baidu.com/szba/blog/item/9a0e5c1eed0431fc1bd57697.html2不管到達哪個面頁基本上都可以通過
    ansicontainstext(webbrowser.LocationURL,'特定與其它網頁地址不一樣的字符') 來判斷或者通過:ansicontainstext(wb.DocumentSourceText,'頁面返回成功的提示信息') 來判斷
      

  3.   

    to devhp,谢谢回复ansicontainstext(webbrowser.LocationURL,'特定與其它網頁地址不一樣的字符') 來判斷 1,应该判断A页面网址,是吧
    2,有返回值吗
    3, 如果返回的是失败,该如何处理?多谢
      

  4.   

    用sleep好像不行吧,在sleep的时候网页在继续加载吗?用timer试试吧。
      

  5.   

    procedure Delay(MSecs: Longint);
    //延时函数,MSecs单位为毫秒(千分之1秒)
    var
      FirstTickCount, Now: Longint;
    begin
      FirstTickCount := GetTickCount();
      repeat
        Application.ProcessMessages;
        Now := GetTickCount();
      until (Now - FirstTickCount >= MSecs) or (Now < FirstTickCount);
    end;在网上找到的,我用着挺好用的。//不过用延时的办法不太好,因为网速和服务器的快慢都不一定。
      

  6.   

    ls 的,问题说的非常好。我也在怀疑sleep。CPU完全空闲,但是sleep完了之后的 getback应该是执行了。只是不知道接下来的sleep是不是中止了这个动作。我会试试这个delay的。谢谢