Giúp code- Lấy link download bộ Disney's Magic English cho IDM (2 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

meocon01

Thành viên mới
Tham gia
29/9/08
Bài viết
29
Được thích
2
- Tình hình là có bộ video học tiếng anh muốn down cho cháu học khi còn bé, bộ Disney's Magic English này đúng là rất hay cho các em bé, Link file tải trên zing, nhưng vì rất nhiều link(>200 Links) nhỏ nên phải làm mở bằng trình duyệt rồi copy link vào IDM để nó tải, vì vậy rất là gian nan
(đầy đủ là 55DVD chắc phải>500 links- em copy tạm 20DVD làm ví dụ)

- Em có ý tưởng là dùng VBA để lấy link sau đó dùng command line gán nó vào IDM(IDM - hỗ trợ command line)
nhưng vẫn chưa tìm cách lấy được cái link tải trong phần <a href= "linktai" ..../a>

- trong file excel đính kèm là link để tải file, một link ví dụ
http://me.zing.vn/apps/sharefile?params=/download/downloadfile/file/MzI1OCs1MTE3ODQ1Mg==
Dưới đây là command line của IDM copy từ trang chủ
PHP:
   You may start IDM from the command line using the following parameters
idman /s
or idman /d URL [/p local_path] [/f local_file_name] [/q] [/h][/n] [/a]
Parameters:
/d URL - downloads a file
e.g. IDMan.exe /d "http://www.internetdownloadmanager.com/path/FileName.zip"
/s - starts queue in scheduler
/p local_path - defines the local path where to save the file
/f local_file_name - defines the local file name to save the file
/q - IDM will exit after the successful downloading. This parameter works only for the first copy
/h - IDM will hang up your connection after the successful downloading
/n - turns on the silent mode when IDM doesn't ask any questions
/a - add a file specified with /d to download queue, but don't start downloading
Parameters /a, /h, /n, /q, /f local_file_name, /p local_path work only if you specified the file to download with /d URL
Examples
C:\>idman.exe /n /d http://www.tonec.com/download/idman317.exe

-Làm theo ví dụ như trang chủ hướng dẫn ko đc phải viết như ví dụ này:
"C:\Program Files\Internet Download Manager\IDMan.exe" /a /d "http://download.utorrent.com/3.2/uTorrent.exe"

-Mong các bác giúp em, không em click chuột để tải files cũng nản !$@!!
 

File đính kèm

Lần chỉnh sửa cuối:
đầu tuần mọi người chắc là đang bận nhiều rồi, hy vọng tối có người giúp đỡ..hic
 
Upvote 0
Bạn có thể vào trang hdvietnam (.com) tìm bộ đĩa này - mỗi đĩa là 1 file ISO => chỉ có 55 link fshare.
 
Upvote 0
link thì em đã có rồi, giờ muốn download thôi, down trên zing ko cần tài khoản mà lại nhanh còn fshare thì em ko có tài khoản-đi kiếm cũng mệt, và cũng muốn làm nó vì sau này còn download nhiều..
em thử dùng code này để tìm tất cả link trong thẻ <a nhưng vẫn ko ra.
Dim url As String
Dim i As Integer
Set ie = CreateObject("internetexplorer.application")
i = 1
url = "http://me.zing.vn/apps/sharefile?params=/download/downloadfile/file/MzI1OCs1MTE3ODQ1Mg=="
ie.navigate url
ie.Visible = True
Do Until Not ie.Busy Or ie.readyState = 4: DoEvents: Loop 'wait IE ready
Set coleclink = ie.document.getElementsByTagName("a")
For Each link In coleclink
Cells(i + 1, 2).Value = link.outerHTML ' ghi code cua the <a
Cells(i + 1, 1).Value = link.getAttribute("href") 'ghi link
i = i + 1
Next
Set ie = Nothing
 
Lần chỉnh sửa cuối:
Upvote 0
Code này làm việc được với mediafire nhưng ko hiểu sao ko được với zing
Dim url As String
Dim Links As Object, Link As Object
url = "http://www.mediafire.com/?yqv1slxsap86rxh"
Set ie = CreateObject("internetexplorer.application")
ie.navigate url
ie.Visible = True
Do Until Not ie.Busy Or ie.readyState = 4: DoEvents: Loop 'wait IE ready
Set Links = ie.document.getElementsByTagName("A")
For Each Link In Links
If Right(Link.href, 3) = "mp3" Then
'If Link.getAttribute("target") = "_blank" And Left(Link.href, 9) = "http://dl" Then
Debug.Print Link.href
Cells(3, 3).Value = Link.href
'Cells(4, 3).Value = Link.outerHTML
Exit For
End If
Next Link
set ie= nothing 'giai phong bo nhớ ie
ie.Quit 'thoat ie
 
Upvote 0
Code này làm việc được với mediafire nhưng ko hiểu sao ko được với zing
Dim url As String
Dim Links As Object, Link As Object
url = "http://www.mediafire.com/?yqv1slxsap86rxh"
Set ie = CreateObject("internetexplorer.application")
ie.navigate url
ie.Visible = True
Do Until Not ie.Busy Or ie.readyState = 4: DoEvents: Loop 'wait IE ready
Set Links = ie.document.getElementsByTagName("A")
For Each Link In Links
If Right(Link.href, 3) = "mp3" Then
'If Link.getAttribute("target") = "_blank" And Left(Link.href, 9) = "http://dl" Then
Debug.Print Link.href
Cells(3, 3).Value = Link.href
'Cells(4, 3).Value = Link.outerHTML
Exit For
End If
Next Link
set ie= nothing 'giai phong bo nhớ ie
ie.Quit 'thoat ie

Tôi chỉ cho bạn sự khác biệt. Một chỗ thì link nằm "tơ hơ" trên DOCUMENT chính, một chỗ thì link "nấp" trong DOCUMENT "con".
Bạn hãy duyệt tới địa chỉ http://www.mediafire.com/?yqv1slxsap86rxh (mediafire). Tiếp theo chọn menu View --> Source.
Trong Source bạn sẽ tìm được link tới tập tin cần tải (http://199.91.153.28/etnxhx8hl67g/yqv1slxsap86rxh/BHK_27+-+www.facebook.com%2Fhoinhungnguoiyeuthichtruyenaudio++.mp3)

Bây giờ bạn duyệt tới địa chỉ http://me.zing.vn/apps/sharefile?params=/download/downloadfile/file/MzI1OCs1MTE3ODQ1Mg==
Ban cũng View --> Source. Chắc chắn bạn không tìm thấy link tới tập tin cần tải (http://dl.download.apps.zing.vn/zingdownload/09a8d784a8030bbd4520e4a1d318f31e/5016ece4/files/2012/05/22/00/57/BabyVNZDVD%2001%20Hello%20Showtimepart01_1337623067.rar?filename=BabyVNZDVD%2001%20Hello%20Showtimepart01.rar)
Tại sao thế???
Để xét source đơn giản tôi soạn cho bạn nội dung:

PHP:
<html xmlns="http://www.w3.org/1999/xhtml">
<head>  
</head> 
<body> 
<iframe name="sharefile" id="sharefile" class="autoHeight" name="_opener" scrolling="no" width="100%" src="http://download.apps.zing.vn?_v=3&params=%2Fdownload%2Fdownloadfile%2Ffile%2FMzI1OCs1MTE3ODQ1Mg%3D%3D&session_id=&signed_request=&code=" frameborder="0" allowtransparency="true" height="800" />
</iframe>
 
</body>
</html>

Bạn hãy dán vào notepad và ghi lại trên đĩa với tên là "bla.html". Bây giờ bạn kích hoạt "bla.html"
Trong cửa sổ mở ra bạn có thể nhấn "Download" để tải tập tin RAR về máy. Nhưng nếu bạn View --> Source thì bạn nhìn thấy nội dung mà tôi đã soạn ở trên. Tức là không có "<a href=..."

Tại sao?
Vì trong cửa sổ chính có cửa sổ con (IFRAME), và trong nó cũng có 1 DOCUMENT. Trong DOCUMENT này mới có cái link tới tập tin cần tải về.
Có thể lấy được đối tượng IFRAME - ie.document.frames("sharefile") - nhưng không thể lấy được (ít ra là tôi không lấy được) đối tượng DOCUMENT của nó - access denied
Bạn hãy tìm đọc về vấn đề trên. Và liệu có cách nào không. Tôi mới lướt qua web thì thấy có vấn đề. Hình như không lấy được.
Nếu không có cách nào khác và bạn chấp nhận đi đường "hơi vòng" một chút thì tôi sẽ cho ví dụ.
 
Upvote 0
Em vào IE, firefox view>source đều thấy link down, kể cả cái file getMF em tạo ra với nội dung mà bác cho thì sau khi click chạy, nó kết nối tới server, view source nó cũng xuất hiện link down,
-Theo bác giải thích bên trên em hiểu nôm na là mình chỉ nhìn thấy thôi nhưng ko lấy được, cái này bác rảnh thì giải thích rõ hộ không thì cũng ko sao mặc dù thấy hơi khó hiểu,
-Bác chỉ cho em cái ví dụ về "đường vòng" đi.
Cảm ơn Bác nhiều.
 

File đính kèm

  • Capture1.JPG
    Capture1.JPG
    115.1 KB · Đọc: 8
  • Capture2.JPG
    Capture2.JPG
    150.4 KB · Đọc: 7
Upvote 0
File bạn tải từ Zing đường link trực tiếp bạn thấy trên hình là nó ẩn bên trong bạn phải làm thêm 1 bước nữa không biết bạn có để ý không mình nghĩ bạn đã làm thêm 1 bước để có được hình trên (như bạn Swintom nói). Nói chung từ view source chúng ta điều thấy link trực tiếp để tải file như với mỗi trình duyệt khác nhau thì đường dẫn khác nhau (mình nghĩ vậy). Ví dụ Firefox từ medifire http://205.196.121.60/4h9yn733xrzg/yqv1slxsap86rxh/BHK_27+-+www.facebook.com%2Fhoinhungnguoiyeuthichtruyenaudio++.mp3 và từ trang zing http://dl.download.apps.zing.vn/zin...lename=BabyVNZDVD 01 Hello Showtimepart01.rar
 
Upvote 0
File bạn tải từ Zing đường link trực tiếp bạn thấy trên hình là nó ẩn bên trong bạn phải làm thêm 1 bước nữa không biết bạn có để ý không mình nghĩ bạn đã làm thêm 1 bước để có được hình trên (như bạn Swintom nói). Nói chung từ view source chúng ta điều thấy link trực tiếp để tải file như với mỗi trình duyệt khác nhau thì đường dẫn khác nhau (mình nghĩ vậy). Ví dụ Firefox từ medifire http://205.196.121.60/4h9yn733xrzg/yqv1slxsap86rxh/BHK_27+-+www.facebook.com%2Fhoinhungnguoiyeuthichtruyenaudio++.mp3 và từ trang zing http://dl.download.apps.zing.vn/zin...lename=BabyVNZDVD 01 Hello Showtimepart01.rar

Mỗi lần truy cập vào trang web nó tạo link tải khác nhau, ko phụ thuộc vào trình duyệt(em nghĩ vậy).
Một bước nữa nhưng em chưa biết bước đi như thế nào, đang đợi cách "đường vòng" của bác Swintom.
 
Upvote 0
Em vào IE, firefox view>source đều thấy link down, kể cả cái file getMF em tạo ra với nội dung mà bác cho thì sau khi click chạy, nó kết nối tới server, view source nó cũng xuất hiện link down,
-Theo bác giải thích bên trên em hiểu nôm na là mình chỉ nhìn thấy thôi nhưng ko lấy được, cái này bác rảnh thì giải thích rõ hộ không thì cũng ko sao mặc dù thấy hơi khó hiểu,
-Bác chỉ cho em cái ví dụ về "đường vòng" đi.
Cảm ơn Bác nhiều.

View attachment 86652
Tôi đang nói về IE, bạn nói về Firefox làm gì? Bạn thao tác với code trong IE chứ có trong Firefox đâu mà bạn quan tâm tới Firefox?
Bạn nói hơi lạ.
Tôi gửi hình lên cho bạn xem. Tôi mở View --> Source thì chả thấy gì.
Nói tóm lại, nhìn được hay không nhưng đường link đó nằm trong FRAME chứ không trong document chính. Vì thế bạn tìm trong document chính thì không tìm được.
-------------
Các bước:
1. Khởi động server. Các bước sau ta làm cho từng đường dẫn - trong vòng FOR
2. mở trang web - ie.Navigate xyz
3. Lấy SRC của IFRAME - URL = ie.Document.getElementById("sharefile").src
4. Nếu ta duyệt tới URL, tức ie.Navigate URL thì ta lại được cửa sổ có IFRAME như cũ ̣(tôi được như cũ. Hay IE của bạn lại mở "đúng"???).
Ta kéo nội dung của Document (nó như là nội dung khi ta mở tập tin HTML bằng notepad ấy) về máy và ghi lại trên đĩa với tên "xyz.html". Ta dùng UrlDownloadToFile để kéo về.
5. Ta Navigate tới "xyz.html" - ie.Navigate "xyz.html".
Bây giờ Document (là document trong IFRAME) được mở đương nhiên là ở cửa sổ chính.
6. Lọc lấy link tới tập tin cần tải.
Mã:
Private Declare Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" (ByVal pCaller As Long, _
                                                                                    ByVal szURL As String, _
                                                                                    ByVal szFileName As String, _
                                                                                    ByVal dwReserved As Long, _
                                                                                    ByVal lpfnCB As Long) As Long
                                                                                    
' nếu dùng reference: Microsoft Internet Controls, Microsoft HTML Object Libary
Sub bla()
    Dim URL As String
    Dim i As Integer
    Dim ie As Object 'SHDocVw.InternetExplorer
    Dim Links As Object 'MSHTML.IHTMLElementCollection
    Dim Link As Object
    Dim filename As String
    
    Set ie = CreateObject("internetexplorer.application")
    ie.Visible = True
'    ta xét ví dụ với 3 đường dẫn
    For i = 5 To 7
        ' đường dẫn
        URL = Sheet1.Cells(i, 2).Value
        ie.Navigate URL
        Do While ie.Busy Or ie.ReadyState <> 4: DoEvents: Loop
        ' đường dẫn tới document trong IFRAME
        URL = ie.Document.getElementById("sharefile").src
        ' tên ghi trên đĩa - phải tạo thư mục temp mếu không có
        filename = "c:\temp\" & CStr(i) & ".html"
'        kéo document HTML của IFRAME về ghi trong thư mục c:\temp
        URLDownloadToFile 0, URL, filename, 0, 0
'        duyệt tới tập tin HTML trong c:\temp (không duyệt tới URL trên web)
        ie.Navigate filename
        Do While ie.Busy Or ie.ReadyState <> 4: DoEvents: Loop
'        lấy tập đường dẫn
        Set Links = ie.Document.getElementsByTagName("A")
        For Each Link In Links
            If Left(Link.href, 18) = "[URL]http://dl.download[/URL]" Then
'                ghi đường dẫn tới tập tin RAR vào sheet - hoặc ghi vào tập tin trên đĩa
                Sheet1.Cells(i + 10, 2).Value = Link.href
                Exit For
            End If
        Next Link
    Next
    
    Set Links = Nothing
    Set ie = Nothing
End Sub
Chú ý:
1. Ta nên xử lý thành từng đợt mỗi đợt vài chục đường dẫn. Quá trình mở các trang có thể lâu, có thể có vấn đề với server hoặc đường truyền.
2. Các link nên ghi vào tập tin text. Sau đó không dùng command line gì cả mà tải bình thường: Mở IDM --> chọn ADD --> duyệt tới tập tin TXT và mở. IDM sẽ tải các tập tin mà đường dẫn có trong tập tin TXT - mỗi đường dẫn ghi trong 1 dòng.
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
xin lỗi Bác vì ko giải thích rõ về 2 ảnh upload lần trước.
-hai ảnh upload lần trước đều thấy link down, một cái duyệt bằng IE, một cái bằng Firefox,
-lần này em upload hai ảnh -capture3, capture4-duyệt bằng IE đều thấy link tải bằng view/source,đúng là hơi lạ.
-máy em dùng là win7 pro, IE 8- có thể là do khác nhau về IE nên có sự khác biệt này

Cách của bác làm đã hoạt động rất tốt, nhưng có vài sự thay đổi chút vì là máy dùng win7
- filename = "c:\temp\" & CStr(i) & ".html" 'ko truy cập được do ko có đủ quyền
' đổi sang C:\Users\Nothing\AppData\Local\Temp
'hoặc ổ E, D gì đó cũng được
-IE phải tắt Enable protect Mode nếu ko sẽ bị lỗi
"Automation error
The interface is unknow"
Còn lại hoạt động tốt --=0, Bác thật là cao thủ lần nào cũng giúp được, giá mà được gần bác học hỏi thì tốt.

Ag, Bác cho em hỏi là trong command line của IDM ko có lệnh nào cho biết là file cần tải đã xong,
Nên em tự hỏi là ko biết trong win có hàm nào có thể xác định file được tạo ra trong một thư mục cụ thể ko?
Các chương trình diệt virus đều có khả năng phát hiện sự thay đổi của file trong hệ thống, như file virus được tải về, hay cắm USB có virus vào
Nếu mình biết file được tạo ra tức là đã download xong,
Em nghĩ dùng timer hoặc vòng lặp để check nhưng vì nó luôn check nên cpu chạy nhiều- hơn nữa máy cấu hình thấp nên chậm, có vài chương trình luôn phải chạy
 

File đính kèm

  • Capture3.JPG
    Capture3.JPG
    124.2 KB · Đọc: 4
  • Capture4.JPG
    Capture4.JPG
    182.3 KB · Đọc: 2
Upvote 0
xin lỗi Bác vì ko giải thích rõ về 2 ảnh upload lần trước.
-hai ảnh upload lần trước đều thấy link down, một cái duyệt bằng IE, một cái bằng Firefox,
-lần này em upload hai ảnh -capture3, capture4-duyệt bằng IE đều thấy link tải bằng view/source,đúng là hơi lạ.
-máy em dùng là win7 pro, IE 8- có thể là do khác nhau về IE nên có sự khác biệt này

Cách của bác làm đã hoạt động rất tốt, nhưng có vài sự thay đổi chút vì là máy dùng win7
- filename = "c:\temp\" & CStr(i) & ".html" 'ko truy cập được do ko có đủ quyền
' đổi sang C:\Users\Nothing\AppData\Local\Temp
'hoặc ổ E, D gì đó cũng được
-IE phải tắt Enable protect Mode nếu ko sẽ bị lỗi
"Automation error
The interface is unknow"
Còn lại hoạt động tốt --=0, Bác thật là cao thủ lần nào cũng giúp được, giá mà được gần bác học hỏi thì tốt.

Ag, Bác cho em hỏi là trong command line của IDM ko có lệnh nào cho biết là file cần tải đã xong,
Nên em tự hỏi là ko biết trong win có hàm nào có thể xác định file được tạo ra trong một thư mục cụ thể ko?
Các chương trình diệt virus đều có khả năng phát hiện sự thay đổi của file trong hệ thống, như file virus được tải về, hay cắm USB có virus vào
Nếu mình biết file được tạo ra tức là đã download xong,
Em nghĩ dùng timer hoặc vòng lặp để check nhưng vì nó luôn check nên cpu chạy nhiều- hơn nữa máy cấu hình thấp nên chậm, có vài chương trình luôn phải chạy

Tôi dùng IE8 và XP. Có thể tôi có hơi khác là do thiết lập chăng?
-------------
Tất nhiên đã là hđh, là môi trường để chạy các ứng dụng thì system phải có đủ loại "đồ". Bạn muốn chơi nhạc, phim, ảnh, văn bản, in ấn, chơi công an, gián điệp, bác sỹ ... thì system có cho bạn chơi.
Bạn có thể theo dõi bàn phím, chuột, bộ nhớ đệm, sọt rác, các thư mục ... xem có thay đổi gì không. Cơ chế rất đơn giản: ai thích theo dõi thì "đặt đơn" lên system. Khi có thay đổi thì system sẽ thông báo. Vd. để theo dõi thư mục (tạo, xóa, đổi tên các tập tin hoặc thư mục trong thư mục được theo dõi) thì gọi hàm FindFirstChangeNotification. Khi được thông báo (vd. có tập tin mới được tạo) mà muốn theo dõi tiếp thì gọi FindNextChangeNotification. Khi muốn kết thúc theo dõi thì gọi FindCloseChangeNotification.
Có một điều là nhiều khi phần mềm tạo tập tin rồi ghi "nội dung" vào nó. Quá trình kết thúc ghi có thể sau nhiều thời điểm tạo tập tin. Tôi không để ý IDM làm như thế nào.
Nhưng cũng có cách khác là ta khởi động Idman và đợi cho tới khi nó kết thúc. Hiện tôi không có nhiều thời gian. Nếu có chút rỗi thì tôi sẽ nghiên cứu IDMan xem thế nào (phải biết người biết ta chứ) rồi nếu thành công thì tôi sẽ cho vd. khởi động IDMan và đợi tới khi nó kết thúc.
 
Upvote 0
Hay đó, ý của bác rất hay, đợi IDM down xong và thoát, khi nó thoát chứng tỏ nó đã down xong, làm thế này cũng được dù chưa được tốt lắm.
Bác bận có thể cho em cái ý, mà cái ý của bác thường rất hay.
Mấy hàm FindNextChangeNotification, FindCloseChangeNotification em ko biết nó, sẽ tìm hiểu sau.
Mà có cách nào làm cho code vba ở trên có thể để đợi IDM down xong rồi lấy link tiếp ko bác ?, tức là tạm thời dừng thực hiện code cho tới khi IDM tải hoàn tất file( tức là khi đó IDM sẽ thoát- nếu mình đặt chế độ)
 
Upvote 0
Hay đó, ý của bác rất hay, đợi IDM down xong và thoát, khi nó thoát chứng tỏ nó đã down xong, làm thế này cũng được dù chưa được tốt lắm.
Bác bận có thể cho em cái ý, mà cái ý của bác thường rất hay.
Mấy hàm FindNextChangeNotification, FindCloseChangeNotification em ko biết nó, sẽ tìm hiểu sau.
Mà có cách nào làm cho code vba ở trên có thể để đợi IDM down xong rồi lấy link tiếp ko bác ?, tức là tạm thời dừng thực hiện code cho tới khi IDM tải hoàn tất file( tức là khi đó IDM sẽ thoát- nếu mình đặt chế độ)

Bạn thử xem
Mã:
For 
 url = "..."
     ' Debug.Print "Bat dau tai"
     RunAndWait url
     ' Debug.Print "Da tai xong"
     MsgBox "tai xong"
Next


Sub RunAndWait(ByVal url As String)
Dim sh As Object, sCmd As String
    Set sh = CreateObject("Wscript.Shell")
    sCmd = """C:\Program Files\Internet Download Manager\IDMan.exe""" & " /d " & url & " /q /n"
    sh.Run "cmd /c " & sCmd, 0, True
    
    Set sh = Nothing
End Sub
 
Upvote 0
Thật tuyệt vời, hoạt động cực kỳ tốt, mặc dù Có chút nhược điểm là khi IDM đang chạy thì excel không sử dụng được, nhưng ko sao. hoạt động được là tốt rồi.
Cám ơn bác nhiều nha.
Bác giải thích một chút cho em về câu lệnh Dos này ko, nó hoạt động như thế nào vậy.
sh.Run "cmd /c " & sCmd, 0, True
 
Lần chỉnh sửa cuối:
Upvote 0
Tải file lên mà toàn bị "Exceeds your quota by xx KB." tải file text nén lại có 4KB mà cũng ko cho,
code cho ai cần, do gặp lỗi upload file nên gửi mọi người link 55 DVD bên mediafire,
PHP:
  Private Declare Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" (ByVal pCaller As Long, _
                                                                                    ByVal szURL As String, _
                                                                                    ByVal szFileName As String, _
                                                                                    ByVal dwReserved As Long, _
                                                                                    ByVal lpfnCB As Long) As Long
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long ' dung chay file bat

                                                                                 
' reference: Microsoft Internet Controls, Microsoft HTML Object Libary
Sub bla()
    Dim url As String
    Dim i As Integer
    Dim ie As Object    'SHDocVw.InternetExplorer
    Dim Links As Object 'MSHTML.IHTMLElementCollection
    Dim Link As Object
    Dim filename As String
        Set ie = CreateObject("internetexplorer.application")
    ie.Visible = True
'  
    For i = 5 To 650
        url = Sheet1.Cells(i, 2).Value
        ie.Navigate url
        Do While ie.Busy Or ie.ReadyState <> 4: DoEvents: Loop
        url = ie.Document.getElementById("sharefile").src
        filename = "C:\Users\Nothing\AppData\Local\Temp\" & CStr(i) & ".html" '- co the thay dia chi nao do theo y ban
'        keo document HTML cua IFRAME vê thu muc 
        URLDownloadToFile 0, url, filename, 0, 0
'        duyet toi tâp tin HTML trong C:\Users\Nothing\AppData\Local\Temp\" (không phai URL trên web)
        ie.Navigate filename
        Do While ie.Busy Or ie.ReadyState <> 4: DoEvents: Loop 'doi ie ready
        Set Links = ie.Document.getElementsByTagName("A")
        For Each Link In Links
            If Left(Link.href, 18) = "http://dl.download" Then
                 RunAndWait (Link.href) ' goi ham gan link vao idm 
                 Kill filename ' xoa file da tai ve theo dia chi filename
                Exit For
            End If
        Next Link
    Next
    Set Links = Nothing ' clear links
    'Set ie = Nothing       
    ie.Quit ' thoat ie
End Sub

Sub RunAndWait(ByVal url As String)
    'ham doi gan link IDM va doi IDM down xong
    Dim sh As Object, sCmd As String
    Set sh = CreateObject("Wscript.Shell")
    sCmd = """C:\Program Files\Internet Download Manager\IDMan.exe""" & " /d " & url & " /q /n"
    sh.Run "cmd /c " & sCmd, 0  ', True
    'sh.Run "cmd /c " & sCmd, 0  , True - Neu có tham so true se doi IDM down xong
     Set sh = Nothing
End Sub

link tải list 55 DVD, file excel
http://www.mediafire.com/view/?zzvzs3x22aju67a
 
Upvote 0
Thật tuyệt vời, hoạt động cực kỳ tốt, mặc dù Có chút nhược điểm là khi IDM đang chạy thì excel không sử dụng được,

Tôi chả hiểu bạn muốn gì nữa. Bạn viết trong bài trước:
Mà có cách nào làm cho code vba ở trên có thể để đợi IDM down xong rồi lấy link tiếp ko bác ?, tức là tạm thời dừng thực hiện code cho tới khi IDM tải hoàn tất file
Về code ...
Cám ơn bác nhiều nha.
Bác giải thích một chút cho em về câu lệnh Dos này ko, nó hoạt động như thế nào vậy
Tôi quên không sửa. Lúc đầu tôi cứ nghĩ là IDMan.exe là phiên bản chạy trong cửa sổ dòng lệnh (WinRaR có RAR.exe chỉ chạy trong cửa sổ dòng lệnh).
Nhưng hóa ra IDMan chỉ có 1. Tôi quên không sửa code. Bạn sửa thành:
Mã:
sh.Run sCmd, 0, True
Code trên có nghĩa là sh.Run đến tận khi process IDMan kết thức mới trở về - return. Tức mọi code có sau sh.Run phải đợi tới khi process IDMan kết thúc - sh.Run trở về (return) thì mới được thực hiện. Nói nôm na thì code "dừng" ở sh.Run và khi nào IDMan kết thúc thì code mới "chạy tiếp". Nó giống như có ông RUN chạy vào phòng máy và khởi động máy IDMan và đợi cho nó làm xong việc mới trở về và làm tiếp các việc có trong lịch. Nếu bạn muốn ông RUN chỉ khởi động máy IDMan thôi là trở về ngay để làm các việc có trong lịch (trong khoảng thời gian này thì máy IDMan vẫn chạy) thì dùng code:
Mã:
sh.Run sCmd, 0, FALSE
 
Upvote 0
Giờ thì em đã hiểu lệnh sh.run hoạt động như thế nào rồi,
Về cơ bản em chỉ cần nó chạy được là OK rồi, đáp ứng đúng được yêu cầu.
Em ko phải là dân chuyên nghiệp, thích thì học tí tẹo thôi.

Từ ngày học lập trình em gặp vấn đề thắc mắc mà vẫn chưa hiểu, nếu có thể mong bác giải thích hộ.
1> Là Ngắt:
- Ngày còn đi học có học lập trình vi điều khiển thấy chương trình biên dịch và vi điều khiển có sử dụng "Ngắt", tức là bình thường chương trình đang hoạt động nhiệm vụ chính, nếu có sự kiện "ngắt" xảy ra thì chương trinh sẽ thực hiện một hàm hoặc một nhiệm vụ nào đó do mình tạo ra, thực hiện xong rồi lại quay lại chương trình chính, Cái ngắt này thuận lợi ở chỗ là mình ko phải lúc nào cũng phải dò hỏi sự kiện "ngắt" nó có xảy ra ko, mà chỉ cần nó xảy ra là làm nhiệm vụ mình yêu cầu.
-Em biết chắc chắn là các phần mềm có sử dụng "ngắt" hoặc loại gì đó tương tự, giả dụ như Excel, ngắt là các phím tắt(Ctrl+O,Ctrl+P...), chỉ cần bấm tổ hợp phím là làm các nhiệm vụ gắn với tổ hợp phím đó, - phương pháp dùng vòng lặp dò hỏi chắc là ko sử dụng ở đây rồi, vì ko hiệu quả- vì sử dụng nhiều vòng lặp dẫn đến máy chạy chậm.
-Nếu có thể bác cho em ví dụ nhỏ để em hiểu thêm, ko có thì bác nói cách nó làm như thế nào, có sử dụng hàm API nào ko?
2> Là Chương trình chạy song song:
Như hệ điều hành Win này có thể cùng lúc chạy nhiều chương trình, cái này thì mong bác giải thích cách thức hoạt động thôi chứ ví dụ em nghĩ chắc cũng khó, vì chắc chắn nó liên quan đến hệ điều hành.

Cảm ơn Bác nhiều vì đã dành thời gian trả lời câu hỏi.
 
Upvote 0
Giờ thì em đã hiểu lệnh sh.run hoạt động như thế nào rồi,
Về cơ bản em chỉ cần nó chạy được là OK rồi, đáp ứng đúng được yêu cầu.
Em ko phải là dân chuyên nghiệp, thích thì học tí tẹo thôi.

Từ ngày học lập trình em gặp vấn đề thắc mắc mà vẫn chưa hiểu, nếu có thể mong bác giải thích hộ.
1> Là Ngắt:
- Ngày còn đi học có học lập trình vi điều khiển thấy chương trình biên dịch và vi điều khiển có sử dụng "Ngắt", tức là bình thường chương trình đang hoạt động nhiệm vụ chính, nếu có sự kiện "ngắt" xảy ra thì chương trinh sẽ thực hiện một hàm hoặc một nhiệm vụ nào đó do mình tạo ra, thực hiện xong rồi lại quay lại chương trình chính, Cái ngắt này thuận lợi ở chỗ là mình ko phải lúc nào cũng phải dò hỏi sự kiện "ngắt" nó có xảy ra ko, mà chỉ cần nó xảy ra là làm nhiệm vụ mình yêu cầu.
-Em biết chắc chắn là các phần mềm có sử dụng "ngắt" hoặc loại gì đó tương tự, giả dụ như Excel, ngắt là các phím tắt(Ctrl+O,Ctrl+P...), chỉ cần bấm tổ hợp phím là làm các nhiệm vụ gắn với tổ hợp phím đó, - phương pháp dùng vòng lặp dò hỏi chắc là ko sử dụng ở đây rồi, vì ko hiệu quả- vì sử dụng nhiều vòng lặp dẫn đến máy chạy chậm.
-Nếu có thể bác cho em ví dụ nhỏ để em hiểu thêm, ko có thì bác nói cách nó làm như thế nào, có sử dụng hàm API nào ko?
2> Là Chương trình chạy song song:
Như hệ điều hành Win này có thể cùng lúc chạy nhiều chương trình, cái này thì mong bác giải thích cách thức hoạt động thôi chứ ví dụ em nghĩ chắc cũng khó, vì chắc chắn nó liên quan đến hệ điều hành.

Cảm ơn Bác nhiều vì đã dành thời gian trả lời câu hỏi.

Nói một cách thật ngắn gọn thì nếu máy chỉ có 1 processor 1 lõi thì về mặt vật lý không thể đồng thời "làm" 2 hay nhiều việc được.
Các process trong RAM được "cho chạy" lần lượt. Chúng "chạy" một khoảng thời gian sau đó chúng bị "đóng băng" để process khác trong "hàng đợi" cũng được chạy "một khoảng thời gian". Cứ như thế chúng được chạy luôn phiên nhau.
Tôi cho vd. Ta có 2 process: A chạy phim "tuoi_mat.avi" còn B chạy "berlin1945.avi".
Nếu một khoảng thời gian nói ở trên là 1 phút thì sẽ thế nào? Thì bạn sẽ thấy là phim ở A chạy được 1 phút thì bị đơ, phim ở B cũng thế, và cái đó cứ lặp lại liên tục. Bạn sẽ thấy 2 process A và B chạy luôn phiên nhau chứ không đồng thời.
Nhưng nếu một khoảng thời gian là vd. 1 phần nghìn giây thì sao? Thì chúng cũng chạy luôn phiên nhau nhưng bạn có cảm giác 2 phim chạy liên tục mà không dừng lúc nào cả. Nó tạo ra cảm giác 2 process chạy song song.
Nói về mặt người dùng thì thực tế các process có chạy song song hay không không có chút quan trọng nào cả. Cái quan trọng với họ là họ có thể khởi động nhiều process và "đồng thời" có thể "làm việc" với chúng. Vd. phim A được thu nhỏ nằm ở 1 góc màn hình, chát Yahoo nằm ở góc khác. Ta vừa xem phim vừa chát. Người dùng không quan tâm liệu các process có đúng là "chạy song song" hay không. Anh ta chỉ cần ở thời điểm bất kỳ có thể "chuyển" sang process bất kỳ và có thể làm việc ngay. Nếu bạn mở WORD, Excel, Access và ở thời điểm bất kỳ bạn có thể chuyển sang chương trình bất kỳ và làm việc được ngay thì bạn có cảm giác là chúng chạy "đồng thời" và "không nghỉ", đúng không?
"Song song" là hiểu theo cách ở trên.
Cũng cần nói thêm là một khoảng thời gian nói ở trên cho mỗi process có thể là khác nhau đấy nhé.
Về Là Ngắt thì tôi không hiểu bạn đang định nói tới cái gì. Thay vì Là Ngắt bạn nên viết tiếng Anh. Không hiểu cái Là Ngắt của bạn nên tôi không giải thích được. Mà bạn định nói tới hđh Windows chứ không phải DOS xa xưa đấy chứ?
 
Upvote 0
Nói một cách thật ngắn gọn thì nếu máy chỉ có 1 processor 1 lõi thì về mặt vật lý không thể đồng thời "làm" 2 hay nhiều việc được.
Các process trong RAM được "cho chạy" lần lượt. Chúng "chạy" một khoảng thời gian sau đó chúng bị "đóng băng" để process khác trong "hàng đợi" cũng được chạy "một khoảng thời gian". Cứ như thế chúng được chạy luôn phiên nhau.
Tôi cho vd. Ta có 2 process: A chạy phim "tuoi_mat.avi" còn B chạy "berlin1945.avi".
Nếu một khoảng thời gian nói ở trên là 1 phút thì sẽ thế nào? Thì bạn sẽ thấy là phim ở A chạy được 1 phút thì bị đơ, phim ở B cũng thế, và cái đó cứ lặp lại liên tục. Bạn sẽ thấy 2 process A và B chạy luôn phiên nhau chứ không đồng thời.
Nhưng nếu một khoảng thời gian là vd. 1 phần nghìn giây thì sao? Thì chúng cũng chạy luôn phiên nhau nhưng bạn có cảm giác 2 phim chạy liên tục mà không dừng lúc nào cả. Nó tạo ra cảm giác 2 process chạy song song.
Nói về mặt người dùng thì thực tế các process có chạy song song hay không không có chút quan trọng nào cả. Cái quan trọng với họ là họ có thể khởi động nhiều process và "đồng thời" có thể "làm việc" với chúng. Vd. phim A được thu nhỏ nằm ở 1 góc màn hình, chát Yahoo nằm ở góc khác. Ta vừa xem phim vừa chát. Người dùng không quan tâm liệu các process có đúng là "chạy song song" hay không. Anh ta chỉ cần ở thời điểm bất kỳ có thể "chuyển" sang process bất kỳ và có thể làm việc ngay. Nếu bạn mở WORD, Excel, Access và ở thời điểm bất kỳ bạn có thể chuyển sang chương trình bất kỳ và làm việc được ngay thì bạn có cảm giác là chúng chạy "đồng thời" và "không nghỉ", đúng không?
"Song song" là hiểu theo cách ở trên.
Cũng cần nói thêm là một khoảng thời gian nói ở trên cho mỗi process có thể là khác nhau đấy nhé.
Về Là Ngắt thì tôi không hiểu bạn đang định nói tới cái gì. Thay vì Là Ngắt bạn nên viết tiếng Anh. Không hiểu cái Là Ngắt của bạn nên tôi không giải thích được. Mà bạn định nói tới hđh Windows chứ không phải DOS xa xưa đấy chứ?

-Vậy nói là chạy song song thực tế ko phải là vậy, chỉ là chạy thằng này dừng thằng kia, do tốc độ máy xử lý nhanh nên ta cảm giác nó chạy đồng thời. Cái này giờ em đã hiểu rồi.
-Còn về Ngắt, Ý em đang nói về window, gần hơn nữa là ngôn ngữ VB là một ví dụ, biên soạn chương trình xong ta bấm F5 là nó chạy, bấm F8 nó chạy từng bước, các nhiệm vụ xác định được gán vào các phím tắt đó. Chương trình ko phải lúc nào cũng hỏi ta có bấm phím F5 hay phím F8 hay ko, mà ta bấm bất kỳ lúc nào đó cũng được.
Rõ ràng là "ngắt" đã được sử dụng ở đây, nhưng mà trong quá trình học em ko thấy nó đề cập đến kỹ thuật xử lý như vậy.
giả dụ nó ko phải là ngắt thì có kỹ thuật nào để xử lý những sự kiện xảy ra mà ko phải dò hỏi sự kiện đó có xảy ra hay ko, cứ nó xảy ra là ta sẽ có một chương trình đáp ứng nó làm một nhiệm vụ gì đó sau đó quay về chương trình chính.
giả dụ code em mô phỏng dưới đây.
Sub Hamchinh()
' ham chinh nay ko lam gi ca, neu co su kien ngat xay ra là thực hiện hàm ngắt.
while 1
' ko làm gì cả.
Wend
End Sub

Sub hamngat()
' nếu phím ESC được bấm thì thông báo "Bạn đã nhấn phím ESC"
Msgbox " Ban da nhan phim ESC"
End Sub

code na ná là như vậy, trong hàm chính ko dò hỏi phím ESC có bấm hay ko, nhưng nếu cứ phím ESC được bấm là có thông báo đã bấm phím ESC.

Cái này em thấy ngôn ngữ nào cũng có xây dựng các hàm có sẵn, như Onclick-hàm click chuột, onchange-hàm thay đổi sự kiện dữ liệu chẳng hạn...
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom