.
Code: Select all
url := "https://www.lynda.com/allcourses/"
output := A_ScriptDir . "\cources.txt"
html := GetHtml(url) ; this may take time
cources := GetCources(html)
SaveToFile(output, cources)
Run, % output
GetHtml(url) {
oWhr := ComObjCreate("Msxml2.ServerXMLHTTP.6.0")
oWhr.setTimeouts(120000, 120000, 120000, 120000)
oWhr.Open("GET", url, false)
oWhr.SetRequestHeader("Pragma", "no-cache")
oWhr.SetRequestHeader("Cache-Control", "no-cache, no-store")
oWhr.Send()
Return html := oWhr.ResponseText
}
GetCources(html) {
doc := ComObjCreate("htmlfile")
doc.write("<meta http-equiv=""X-UA-Compatible"" content=""IE=9"">")
doc.write(html)
courceContainer := doc.querySelector("ul.course-list")
items := courceContainer.getElementsByTagName("h3")
Loop % items.length {
item := items[A_Index - 1]
itemText := item.innerText
itemLink := item.getElementsByTagName("a")[0].getAttribute("href")
text .= (text ? "`r`n`r`n" : "") . "Title: " . itemText . "`r`nLink: " . itemLink
}
Return text
}
SaveToFile(filePath, string) {
oFile := FileOpen(filePath, "w")
oFile.Write(string)
oFile.Close()
}
...
Code: Select all
url := "https://www.lynda.com/allcourses/"
output := A_ScriptDir . "\cources.txt"
html := GetHtml(url) ; this may take time
cources := GetCources(html)
SaveToFile(output, cources)
Run, % output
GetHtml(url) {
size := LoadDataFromUrl(url, buff)
Return html := StrGet(&buff, size, "utf-8")
}
GetCources(html) {
doc := ComObjCreate("htmlfile")
doc.write("<meta http-equiv=""X-UA-Compatible"" content=""IE=9"">")
doc.write(html)
courceContainer := doc.querySelector("ul.course-list")
items := courceContainer.getElementsByTagName("h3")
Loop % items.length {
item := items[A_Index - 1]
itemText := item.innerText
itemLink := item.getElementsByTagName("a")[0].getAttribute("href")
text .= (text ? "`r`n`r`n" : "") . "Title: " . itemText . "`r`nLink: " . itemLink
}
Return text
}
SaveToFile(filePath, string) {
oFile := FileOpen(filePath, "w")
oFile.Write(string)
oFile.Close()
}
LoadDataFromUrl(url, ByRef buff) {
static INTERNET_OPEN_TYPE_DIRECT := 1, INTERNET_OPTION_CONNECT_TIMEOUT := 2
, flag1 := (INTERNET_FLAG_RELOAD := 0x80000000)
| (INTERNET_FLAG_IGNORE_CERT_DATE_INVALID := 0x2000)
| (INTERNET_FLAG_IGNORE_CERT_CN_INVALID := 0x1000)
| (INTERNET_FLAG_PRAGMA_NOCACHE := 0x100 )
| (INTERNET_FLAG_NO_CACHE_WRITE := 0x04000000)
, flag2 := (HTTP_QUERY_FLAG_NUMBER := 0x20000000) | (HTTP_QUERY_CONTENT_LENGTH := 5)
, userAgent := "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0"
if !hLib := DllCall("LoadLibrary", Str, "Wininet.dll")
throw Exception("Can't load Wininet.dll")
if !hInternet := DllCall("Wininet\InternetOpen", Str, userAgent, UInt, INTERNET_OPEN_TYPE_DIRECT, Ptr, 0, Ptr, 0, UInt, 0, Ptr) {
DllCall("FreeLibrary", Ptr, hLib)
throw Exception("InternetOpen failed")
}
DllCall("Wininet\InternetSetOption", Ptr, hInternet, UInt, INTERNET_OPTION_CONNECT_TIMEOUT, UIntP, t := 120000, UInt, 4)
Loop 1 {
if !hUrl := DllCall("Wininet\InternetOpenUrl", Ptr, hInternet, Str, url, Ptr, 0, UInt, 0, UInt, flag1, Ptr, 0, Ptr) {
error := "InternetOpenUrl failed"
break
}
if !DllCall("Wininet\HttpQueryInfo", Ptr, hUrl, UInt, flag2, UIntP, fullSize, UIntP, l := 4, UIntP, idx := 0) {
error := "HttpQueryInfo failed"
break
}
VarSetCapacity(buff, fullSize, 0), bytesRead := 0
while DllCall("Wininet\InternetQueryDataAvailable", Ptr, hUrl, UIntP, size, UInt, 0, Ptr, 0) && size > 0 {
DllCall("Wininet\InternetReadFile", Ptr, hUrl, Ptr, &buff + bytesRead, UInt, size, UIntP, read)
bytesRead += read
}
DllCall("Wininet.dll\InternetCloseHandle", Ptr, hUrl)
}
DllCall("Wininet\InternetCloseHandle", Ptr, hInternet)
DllCall("FreeLibrary", Ptr, hLib)
if error
throw Exception(error)
Return bytesRead
}