煩惱好久了><請問大神們!如何點選潛藏在javascript的按鈕呢?!
想要點選商品->台指期
https://www.cmoney.tw/vt/foaccountuserset.aspx
我有做一個幾大銀行外匯比價的網頁(玩票性質的作品),用ASP.NET+C#+HTMLAgilityPack寫的,真的是窮追不捨,其中一家改版,我就要再去人工重爬一次找對應的XPATH.........
一開始真的是五六家銀行都OK,夢做太大...!
幾個月沒去維護,結果變成
為什麼沒再維護?懶,懶懶懶懶懶.............好吧,曲高和寡,按讚的不多,用的人更少,幾個月下來都是零頭點擊數(大概也是我在用的),明明都是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之後才去取得網頁內容,現在防爬蟲愈來愈顯學,做爬蟲的人苦啊
沒有JavaScript按鈕,
只有出現在畫面上的按鈕才能按,
爬蟲只是實際操作的另一種方式,
如果你連網頁沒出現在畫面上的,
爬蟲也無法點擊.