iT邦幫忙

0

C# webbrowser 如何連續下一頁

c#

各位前輩好 因為我想抓網頁上面多個頁面的資料 小弟本以為用迴圈連續點擊下一頁就好 但是測試後發現 每次點擊都只會到第2頁 就停止了 但是迴圈是有在計算不知道哪邊出現了問題
請各位前被提點 謝謝

private void button4_Click(object sender, EventArgs e)
{

        for (int pa = 0; pa < 15; pa++)
        {
            HtmlElement pager = webBrowser1.Document.Window.Frames[0].Document.All["pager"]; 

            HtmlElementCollection pagerss = pager.GetElementsByTagName("a");        
            

            foreach (HtmlElement tro in pagerss)
            {
                if (tro.InnerText != null)
                {                                            
                  if (tro.InnerText == "下一頁")
                    {
                        tro.InvokeMember("Click");  //模拟点击                     

                        break;
                    }

                }
                
            }
                          
        }
    }
Homura iT邦研究生 1 級 ‧ 2018-07-27 17:28:10 檢舉
你是爬哪個網頁貼一下
1111

2 個回答

0

HtmlElementCollection pagerss = ager.GetElementsByTagName("a");

HtmlElementCollection pagerss = pager.GetElementsByTagName("a");

看更多先前的回應...收起先前的回應...

謝謝前輩 我剛剛不小心刪到P 我的按鈕 是可以做動的 只是要我自己按 我希望的是可以點一次按鈕 他依我設定的迴圈點下一頁點到我需要的頁數

把debug斷點下在 HtmlElement pager = webBrowser1.Document.Window.Frames[0].Document.All["pager"]; 這行,不就知道click之後,第二次發生什麼了? 看一下pager物件有沒有東西~

我有下過debug斷點 也確定pager物件內是有東西 但是就是不知道為什麼 只能重第一頁到第二頁 然後就停住了 可是如果我手動點一下按鈕 是可以到第3頁的 我也有看過迴圈的變數 的確有變動 但是 網頁 止停在第2頁這邊就不會往下了

所以第二次也有執行到tro.InvokeMember("Click"); ?

有的 我有中斷在 tro.InvokeMember("Click"); 我有確認 他的確有進入這行

https://ithelp.ithome.com.tw/upload/images/20180730/20110807NeKqAMNAKI.png

看來要試了才知道,網址?

111

Homura iT邦研究生 1 級 ‧ 2018-07-27 17:50:54 檢舉

下一頁在哪?
該不會要登入才有...
結果是截圖....

if (tro.InnerText == "下"+(pa + 1)+"頁") 改成這樣試試

我會再試試看的 謝謝前輩指點

0
小魚
iT邦高手 1 級 ‧ 2018-07-27 19:55:57

頁面載入需要時間吧,
你應該要等畫面Load完畢了,
再做點擊的動作吧,
我猜是不是這個問題...

看更多先前的回應...收起先前的回應...

我剛剛也有想到 只是不知道要如何設計 頁面載入需要時間

小魚 iT邦高手 1 級 ‧ 2018-07-27 20:04:53 檢舉

這一篇 寫得還不錯,
我之前也是看這個學的,
不過要仔細看跟實作才會懂,

針對你的問題,
重點在這裡
private void webBrowser1_DocumentCompleted

if (webBrowser1.ReadyState == WebBrowserReadyState.Complete)

可以做成一個Function,Function中載入完畢再呼叫Function。

謝謝小魚大 我今天也有用過if (webBrowser1.ReadyState == WebBrowserReadyState.Complete) 這段程式碼 可能我沒弄懂 所以當下 沒有動作 我會再試試 所以這段程式碼 對iframe的框架也是有用是嘛

小魚 iT邦高手 1 級 ‧ 2018-07-29 09:35:53 檢舉

我之前測試,
webBrowser遇到iframe可能會抓不到資料,
不知道你的需求是什麼?

小魚大 這是一個北京賽車的網站 需要進去到裡面抓取他的歷史資料來做統計

https://ithelp.ithome.com.tw/upload/images/20180730/20110807XjVHZeA32x.png

111

小魚 iT邦高手 1 級 ‧ 2018-07-30 11:54:09 檢舉

如果你是要抓資料的話,
可以使用HttpRequest的方式,
HttpRequest可以抓到iframe的資料,
也就是一般所謂的爬蟲.

是 小魚大 我會多試驗的 因為HttpRequest我沒用過 所以我要練習看看

我要發表回答

立即登入回答