iT邦幫忙

0

爬蟲| 如何使用Python中的Selenium爬取抓取javascript按鈕?

煩惱好久了><請問大神們!如何點選潛藏在javascript的按鈕呢?!
想要點選商品->台指期
https://www.cmoney.tw/vt/foaccountuserset.aspx

最好不要用DOM抓TAG,對方網頁一改版你就追到死.......(我以前也是這樣)

用電腦瀏覽器先的開發人員模式,用人工追出點按鍵會去下載什麼頁面或AJAX回XML或JSON,你就直接對的個動作抓相應POST或GET即可
ccutmis iT邦高手 9 級 ‧ 2019-07-31 08:51:21 檢舉
請google 提問的藝術
echochio iT邦研究生 3 級 ‧ 2019-07-31 09:10:28 檢舉
截個畫面你要點選哪個 ?
用 xpath方式按鈕 一定可以找到的 ......
只是改版你就可能改一次 ... 但很少改版吧 .....

2 個回答

1
japhenchen
iT邦新手 2 級 ‧ 2019-07-31 09:42:50
最佳解答

我有做一個幾大銀行外匯比價的網頁(玩票性質的作品),用ASP.NET+C#+HTMLAgilityPack寫的,真的是窮追不捨,其中一家改版,我就要再去人工重爬一次找對應的XPATH.........

一開始真的是五六家銀行都OK,夢做太大...!
https://ithelp.ithome.com.tw/upload/images/20190731/20117954XjmGHoaRmg.jpg

幾個月沒去維護,結果變成
https://ithelp.ithome.com.tw/upload/images/20190731/20117954rE1ay8vv7G.jpg

為什麼沒再維護?懶,懶懶懶懶懶.............好吧,曲高和寡,按讚的不多,用的人更少,幾個月下來都是零頭點擊數(大概也是我在用的),明明都是RWD,手機也適用,為何沒人用?唉,桑薪.....

以下是C#示範如何抓匯率,自從中信改用AJAX而不是靜態HTML之後,就再也無法使用,誰叫HTMLAgility不支援render()

    private void 取得中國信託網站的匯率(List<幣種匯率> ret)
    {
        string site = "https://www.ctbcbank.com/CTCBPortalWeb/toPage?id=TW_RB_CM_ebank_018001";
        HtmlAgilityPack.HtmlDocument 網站內容 = new HtmlAgilityPack.HtmlDocument();
        WebClient wc = new WebClient();
        ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Ssl3 | (SecurityProtocolType)3072;
        ServicePointManager.ServerCertificateValidationCallback += new RemoteCertificateValidationCallback(CheckValidationResult);
        var data = wc.DownloadData(new Uri(site));
        string HTMLdata = Encoding.UTF8.GetString(data);
        網站內容.LoadHtml(HTMLdata);
        if (網站內容 != null)
        {
            HtmlNodeCollection trs = 網站內容.DocumentNode.SelectNodes("//table[@id='mainTable']//tr");
            if (trs!=null && trs.Any())
            {
                foreach (var tr in trs)
                {
                    HtmlNodeCollection tds = tr.SelectNodes("td");
                    if (tds.Count >= 5)
                    {
                        string currname = spx.Replace(tds[0].InnerText, "");
                        var ql = currname.Split('/');
                        if (ql.Count() == 2)
                        {
                            ret.Add(new 幣種匯率(
                                "中信商銀",                                site,                                ql.Last(),                                ql.First(),                                Convert.ToDecimal(spx.Replace(tds[3].InnerText, "").PadLeft(10, '0')),                                Convert.ToDecimal(spx.Replace(tds[4].InnerText, "").PadLeft(10, '0')),                                Convert.ToDecimal(spx.Replace(tds[1].InnerText, "").PadLeft(10, '0')),                                Convert.ToDecimal(spx.Replace(tds[2].InnerText, "").PadLeft(10, '0'))
                            ));
                        }
                    }
                }
            }
        }
    }

but........Python的requests-html有支援render(),可以在執行頁面所有javascript+ajax之後才去取得網頁內容,現在防爬蟲愈來愈顯學,做爬蟲的人苦啊

以前也做過輸入關鍵字就搜尋各大購物網站(奇摩、PCHOME、樂天、MOMO)商品價格的比價網頁,那時還只是用PHP寫的成品,後來也是因為用的人少,沒人回饋失連或查不到的問題,我也是愈做愈灰心,後來就送人啦

熱誠很重要

美工更重要,畫面漂亮,遠比功能還重要!

ccutmis iT邦高手 9 級 ‧ 2019-07-31 11:25:51 檢舉

如果是有貼自己寫的源碼說明自己做過哪些努力的網友,我可以給些個人建議。像這層樓主只貼個連結說他煩惱很久了,伸手牌就懶得理他了...
/images/emoticon/emoticon82.gif

0
小魚
iT邦大師 1 級 ‧ 2019-07-31 13:05:30

沒有JavaScript按鈕,
只有出現在畫面上的按鈕才能按,
爬蟲只是實際操作的另一種方式,
如果你連網頁沒出現在畫面上的,
爬蟲也無法點擊.

我要發表回答

立即登入回答