全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:3119
推到 Plurk!
推到 Facebook!

如何取得網頁上, 動態選項的 URL

尚未結案
760729
一般會員


發表:32
回覆:51
積分:16
註冊:2004-09-08

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-09-20 20:42:27 IP:210.68.xxx.xxx 未訂閱
請問各位高手, 如何利用 BCB 或 Delphi 取得網頁上, 動態選項的 URL, 及 javascript 中 function() 內, 訂定的 URL?
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-09-21 09:46:07 IP:61.220.xxx.xxx 未訂閱
1. 請問您是要寫個 AP 去 Web Server 抓網頁 ? (然後分析 動態選項的 URL, 及 javascript 中 function() 內, 訂定的 URL 嗎 ?) 動態選項的 URL => 因為是 user 選擇後送出才有的資訊, 所以抓不到; 您可以在 Web Server 用 php, asp, cgi ... 接收送出的資訊 javascript 中 function() 內訂定的 URL => 固定死的就可以抓到 2. 請問您是要寫個 Web Server ? 動態選項的 URL => 可以抓到 javascript 中 function() 內訂定的 URL => 固定死的就可以抓到
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
760729
一般會員


發表:32
回覆:51
積分:16
註冊:2004-09-08

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-09-21 10:27:50 IP:203.64.xxx.xxx 未訂閱
我是想寫一個 AP 來檢查網頁上所有的鏈結是否正常, 因碰到上述問題, 所以才來請教高手們. 謝謝 pcboy2
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-09-21 13:13:24 IP:210.69.xxx.xxx 未訂閱
1.讀取網頁原始內容 (例如讀到 Memo 或 RichEdit ), 分析出每個網址 (一般是抓 抓 a href 後面網址, 但是 JavaScript 或 SELECT/OPTION 中的可能沒有 a href 開始; 另外注意某些網址可能有 http 開始, 沒有 http 開始, www 開始, 沒有 www 開始, )    2.逐一嘗試抓取網址指向的網頁, 看看能否抓到, 下面 code 供參考  
uses
IdHTTP, IdException;
 
procedure TForm1.FormCreate(Sender: TObject);
var
  code2 : integer;
begin
  IdHTTP1.HandleRedirects:=true;
  try
      // 不加上 http 會錯誤
       // Memo1.Text:=IdHTTP1.Get('www.k.com.tw');
      Memo1.Text:=IdHTTP1.Get('http://www.k.com.tw/');
      code2 := IdHTTP1.ResponseCode;
  except
    on E: EIdHTTPProtocolException do begin
           Showmessage('EIdHTTPProtocolException');
           case e.ReplyErrorCode2 of
             404: ShowMessage('找不到網頁');
           end;
        end;
    on E: EIdSocketError do begin
//        Showmessage(E.Message);
        Memo1.Lines.Add(E.Message);
      code2 := IdHTTP1.ResponseCode;
        end;
  end;
  Memo1.Lines.Add('Finial!');
 If Assigned(IdHTTP1) Then 
    IdHTTP1.Free;  // 用.Free來釋放物件實體
end;
 
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
760729
一般會員


發表:32
回覆:51
積分:16
註冊:2004-09-08

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-09-21 13:44:10 IP:203.64.xxx.xxx 未訂閱
pcboy2 你好, 謝謝你的幫助, 我原先也是利用此法去作, 就如同你說的, 有很多的鏈結是無法擷取的, 所以才想是否有其它的方法?
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-09-21 14:21:11 IP:210.69.xxx.xxx 未訂閱
您是想寫類似 Teleport 軟體來 mirror Web-Site ? 這不可能全部檢查到, 建議用 a href 來判斷, 其它放棄 或者用來檢查自己網站中網頁的超連結是否都還活著 ? 建議您寫的網頁中網址前面全部加上 http, 用 http 判斷
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
760729
一般會員


發表:32
回覆:51
積分:16
註冊:2004-09-08

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-09-21 16:13:56 IP:203.64.xxx.xxx 未訂閱
很類似, 但不需要將資料複製到 local HD.
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-09-22 18:02:35 IP:218.32.xxx.xxx 未訂閱
重點不是將資料複製到 local HD, 而是如何判斷是網址 ! 類似哪個? Teleport ? 檢查自己網站中網頁的超連結是否都還活著 ? 只抓 a href 和 http 設定的網址不行嗎?
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
760729
一般會員


發表:32
回覆:51
積分:16
註冊:2004-09-08

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-09-23 08:37:09 IP:203.64.xxx.xxx 未訂閱
pcboy2 您好: 我是想擷取網頁上所有的鏈結, 而抓 a href 和 http 設定的網址, 只是部份的 所以我才想請教各位高手是否有更好的方法.
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-09-23 09:06:47 IP:210.69.xxx.xxx 未訂閱
不想漏抓, 那就搜尋 . (句點) , 搜到就當成網域, 再分析出網址, 然後去抓網頁 (但是很可能誤判) 1個句點的網域 (例如 come.to) (網址 come.to/aaa.htm ) 2個句點的網域 (例如 www.hinet.net) 3個句點的網域 (例如 www.asus.com.tw) 4個句點的網域 (例如 www.ee.nsysu.edu.tw) ... N個句點的網域 應該沒有萬無一失的方法, 不然 teleport 早就用了
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
760729
一般會員


發表:32
回覆:51
積分:16
註冊:2004-09-08

發送簡訊給我
#11 引用回覆 回覆 發表時間:2004-09-23 09:27:46 IP:203.64.xxx.xxx 未訂閱
您說的是一個方法, 但是在 javascript 及 vbscript 等語法, 有用到變數的方法來組合成鏈結, 這樣您的方法就有問題了.
ha0009
版主


發表:16
回覆:507
積分:639
註冊:2002-03-16

發送簡訊給我
#12 引用回覆 回覆 發表時間:2004-09-23 11:36:08 IP:219.80.xxx.xxx 未訂閱
你好:
  其實你可以善用 MS 的 DHTML 物件幫你完成解析的動作
然後在去判斷內含 href 屬性的物件既可。我有一個範例你參
考看看吧。      < href="http://sourceprovide.deepen.com.tw/k_top/GetHrefDemo.rar">http://sourceprovide.deepen.com.tw/k_top/GetHrefDemo.rar
760729
一般會員


發表:32
回覆:51
積分:16
註冊:2004-09-08

發送簡訊給我
#13 引用回覆 回覆 發表時間:2004-09-23 16:19:09 IP:203.64.xxx.xxx 未訂閱
ha0009 您好: 我是已用類似的方法了, 但是在網頁上, 有些鏈結是在 mouse 移過去後, 又會出現一些視窗內有可點選的鏈結, 這部份您提供的方法就無法獲得了, 不過還是謝謝您.
conundrum
尊榮會員


發表:893
回覆:1272
積分:643
註冊:2004-01-06

發送簡訊給我
#14 引用回覆 回覆 發表時間:2004-09-23 22:29:07 IP:61.64.xxx.xxx 未訂閱
http://delphi.ktop.com.tw/topic.php?topic_id=37356
760729
一般會員


發表:32
回覆:51
積分:16
註冊:2004-09-08

發送簡訊給我
#15 引用回覆 回覆 發表時間:2004-09-24 09:29:53 IP:203.64.xxx.xxx 未訂閱
謝謝
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#16 引用回覆 回覆 發表時間:2004-09-27 10:59:10 IP:210.69.xxx.xxx 未訂閱
引言: 您說的是一個方法, 但是在 javascript 及 vbscript 等語法, 有用到變數的方法來組合成鏈結, 這樣您的方法就有問題了.
技術上您的網址是可以用變數組合 實際上應該沒有人這樣做吧
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
760729
一般會員


發表:32
回覆:51
積分:16
註冊:2004-09-08

發送簡訊給我
#17 引用回覆 回覆 發表時間:2004-09-29 09:03:00 IP:203.64.xxx.xxx 未訂閱
其實蠻多的, 如 toget.pchome.com.tw
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#18 引用回覆 回覆 發表時間:2004-09-29 09:35:51 IP:210.69.xxx.xxx 未訂閱
引言: 其實蠻多的, 如 toget.pchome.com.tw
這不算變數組合 您可否列幾個網址, 該網頁中有用到變數組合成為網址
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
760729
一般會員


發表:32
回覆:51
積分:16
註冊:2004-09-08

發送簡訊給我
#19 引用回覆 回覆 發表時間:2004-09-29 10:45:22 IP:203.64.xxx.xxx 未訂閱
http://ec2.pchome.com.tw/exh/00000001/index.htm 內 var other_type; var left_show = true; var exh_no = new Array('00000000','00000001','00000006','00000075','00000002','00000090','00000011','00000018','00000091','00000124','00000019','00000131','00000121','00000021','00000053','00000044','00000020','00000077','00000111','00000034','00000010','00000022','00000054','00000037','00000023','00000059','00000035','00000125','00000007','00000060','00000112','00000003','00000123','00000113','00000102','00000063','00000025','00000008','00000004','00000009','00000103','00000092','00000083','00000026','00000029','00000071','00000005','00000104','00000101','00000093','00000046','00000030','00000056','00000027','00000068','00000116','00000031','00000057','00000096','00000107','00000105','00000094','00000033','00000058','00000120','00000119','00000106','00000085','00000049'); var exh_parent = new Array('00000000','00000001','00000006','00000006','00000001','00000090','00000006','00000018','00000090','00000006','00000019','00000021','00000020','00000021','00000020','00000021','00000020','00000022','00000021','00000020','00000006','00000022','00000022','00000020','00000023','00000022','00000020','00000006','00000006','00000022','00000112','00000001','00000021','00000023','00000020','00000022','00000018','00000006','00000001','00000006','00000020','00000090','00000022','00000018','00000019','00000023','00000001','00000020','00000006','00000090','00000023','00000019','00000022','00000018','00000018','00000001','00000019','00000022','00000006','00000023','00000020','00000090','00000019','00000001','00000090','00000021','00000020','00000018','00000023'); var exh_name = new Array('首頁','工具軟體','辦公室軟體','Office系列','防毒軟體','Game','翻譯軟體','影像多媒體','PC Game','名片管理','網路應用','象棋圍棋','PDA超值組合','居家生活','Palm軟體','空間設計','PDA軟體','軟體教學','風水算命','工具軟體','文件管理','學習','英文寫作','休閒娛樂','圖庫','實用英語','商務應用','專案管理','簡報範本','商用英語','企業軟體','系統工具','國際電話卡','專業圖庫','全民英檢','全民英檢','影像處理','輸入法','燒錄軟體','字型','商用英語','JAVA Game','日文學習','影音編輯','網路安全','圖片素材','備份還原','實用英語','會計實務','PS2','實用插圖','架站工具','進修學習','影音播放','繪圖軟體','程式設計','網頁製作','兒童教育','企管財務','動態圖庫','托福考試','XBOX','網路工具','手機軟體','XBOX週邊配件','個人理財','日文學習','數位沖印','信箋賀卡'); var exh_color = new Array('FFC626','2797FF','8BD62B','','2797FF','FF8476','','9E76F6','','','E0982A','','','47D327','','','3DC7DC','','','','','49D19B','','','FF9733','','','','','','0065CB','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','',''); var exh_bgcolor = new Array('FFF6D5','E6F5FF','EEFBDE','','E6F5FF','FFF0EF','','F5F0FF','','','FFF6E7','','','EBFFE7','','','E9FCFF','','','','','E5FFF5','','','FEF2E6','','','','','','F0F2F2','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','',''); var ec2_img = 'http://ec2img.pchome.com.tw'; var ec2_www_status = false; var exh_kind = document.main.exh_kind.value; //if(ec2_img.match(/ec2\w*\.pchome\.com\.tw/)) ec2_www_status = true; if(.host.match(/ec2(ssl)?\.\w*pchome\.com\.tw/)) ec2_www_status = true; for(var i in exh_no){ if(exh_no[i] != exh_parent[i]) continue; if(!eval("var main_" exh_no[i])){ eval("var main_" exh_no[i] " = new make_exh('" exh_no[i] "'," i ")"); eval("left_bar.main_" exh_no[i] " = main_" exh_no[i]); } } for(i in exh_no){ if(!eval("var sub_" exh_no[i])) eval("var sub_" exh_no[i] " = new make_exh('" exh_no[i] "'," i ")"); if(exh_no[i] != exh_parent[i]) eval("left_bar.main_" exh_parent[i] ".sub_" exh_no[i] "= sub_" exh_no[i]); } for(i in exh_no){ if(exh_kind == exh_no[i]){ if(exh_no[i] == exh_parent[i]){ //left_sub = default_exh(left_bar,exh_parent[i]); }else{ left_sub = exh_no[i]; } left_main = exh_parent[i]; break; } } if (other_type != 'other') (make_tab());
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#20 引用回覆 回覆 發表時間:2004-09-30 12:06:35 IP:210.69.xxx.xxx 未訂閱
如果所有網址一定都要抓出    開發一個類似做軟體測試用的程式 (工程不小  ), 它可以模擬和執行所有程式可能會執行的路徑和選項, 將程式所有丟出的網址全部紀錄下
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
760729
一般會員


發表:32
回覆:51
積分:16
註冊:2004-09-08

發送簡訊給我
#21 引用回覆 回覆 發表時間:2004-10-01 08:17:17 IP:203.64.xxx.xxx 未訂閱
現在市場上缺乏此類軟體, 所以想自己摸索看看.
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#22 引用回覆 回覆 發表時間:2004-10-01 18:39:14 IP:218.32.xxx.xxx 未訂閱
> 所以想自己摸索看看. 加油, code 寫好後希望可以分享
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
760729
一般會員


發表:32
回覆:51
積分:16
註冊:2004-09-08

發送簡訊給我
#23 引用回覆 回覆 發表時間:2004-10-05 09:17:16 IP:203.64.xxx.xxx 未訂閱
我盡力去做寫了, 若成功了, 一定公布結果.
暗黑破壞神
版主


發表:9
回覆:2301
積分:1627
註冊:2004-10-04

發送簡訊給我
#24 引用回覆 回覆 發表時間:2004-10-05 12:18:24 IP:221.169.xxx.xxx 未訂閱
javascript 中你也想要? 如果是我,我會考慮幾個方向 1. html tag parser 出來。存在一個緩衝區,以做為我運算使用。 然後解析它的”動作(javascript)”有多少。這裏就像是普通的網頁資料了。 2.再依第1個動作所產生的”動作”到原始html中去找它的javascript code。 當然。這個時候你就要寫一個小小的編譯程式。來對javascript code 作編譯了。這方面,你可以參考一些 compiler 的書去做。也可以去找找 yacc 這種東東,看在delphi上有沒有支援了。 加油。^_^
760729
一般會員


發表:32
回覆:51
積分:16
註冊:2004-09-08

發送簡訊給我
#25 引用回覆 回覆 發表時間:2004-10-05 20:42:14 IP:210.68.xxx.xxx 未訂閱
謝謝您的意見, 看起來好複雜.
系統時間:2024-06-26 21:58:00
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!