WebClient를 사용하여 패턴이있는 웹 사이트에서 여러 이미지를 다운로드하는 응용 프로그램을 개발했습니다. 나는이 시작되면 , 내 생각은 빠르고 손쉽게 응용 프로그램, 그래서 함께 양식을 만들어 : 스토리지 .Net - WebClient 또는 HttpWebRequest가 콘텐츠를 얻습니다.
- 웹 브라우저 (WB) 여러 URL을 넣어
- 여러 줄 텍스트 상자
- 텍스트 상자 각 사진의 링크는
그것은 쉽게, 그냥 필요했던 과정을 시작하기 위해있는 TargetPath에게
이제 앱이 더 크고 크롤링 할 웹 사이트가 더 많으며이를 관리하기 위해 BackgroundWorker를 사용하고 싶습니다. BGWorker의 작동 방식을 배우기 시작했고 WebBrowser와 같은 컨트롤을 사용할 수 없다는 것을 알았습니다. 예외가 발생하여 WB.Document.All을 사용하여 링크를 얻을 수 없습니다.
http://www.codeproject.com/Articles/17979/Downloading-Files-in-NET-With-All-Information-Prog
그는 사용 HttpWebRequest를, 내가 먼저 링크를 얻을 필요가있는 경우 구현하기 어려워 보인다
나는 구체적으로이 일, BGWorker을 가진 파일을 다운로드하는 방법에 CodeProject의에서 놀라운 예를 찾아 .내 질문은 : HttpWebRequest를 사용하도록 앱을 다시 코딩해야합니까, 아니면 BGWorker를 사용하기 위해 현재 코드 (WebBrowser가 관련됨)를 적용 할 수 있습니까? BGWorker에서 WebBrowser를 사용할 수 있다면 올바른 방법은 무엇입니까?
현재 관련 코드 (버튼을 클릭하면이 함수가 호출됩니다). 필요한 줄만 둡니다 :
Function ExtractLicensePlate()
Dim Client As New WebClient
Dim totalPhotos As Integer = 0
Dim finalPlate As String = "[no licenseplate found]"
Dim totalCarsList As Integer = txtURLs.Lines.Where(Function(l) Not String.IsNullOrWhiteSpace(l)).Count()
For i = 0 To totalCarsList - 1
WB.Navigate(txtURLs.Lines(i))
WaitForPageLoad()
For Each ele As HtmlElement In WB.Document.All
'ALD
If comboProviders.SelectedIndex = 0 Then
If ele.GetAttribute("src").ToLower.Contains("iddoc") Then
Dim imgsrc As String = ele.GetAttribute("src")
lstPhotos.Items.Add(imgsrc)
End If
'get license plate to make folders
If ele.GetAttribute("action").ToLower.Contains("matr=") Then
Dim fullURLname As String = ele.GetAttribute("action")
finalPlate = fullURLname.Split("=")(3).Substring(0, 7)
End If
End If
Next
If (Not Directory.Exists(txtDirectory.Text & "\" & finalPlate)) Then
If Not (finalPlate = "[no licenseplate found]") Then
Directory.CreateDirectory(txtDirectory.Text & "\" & finalPlate)
End If
End If
For j = 0 To lstPhotos.Items.Count - 1
Client.DownloadFile(lstPhotos.Items(j).ToString, txtDirectory.Text & "\" & finalPlate & "\" & finalPlate & j & ".jpg")
Client.Dispose()
Next j
lstPhotos.Items.Clear()
Next i
Return 0
End Function
도움이 될 것입니다.
모두에게 감사드립니다.
내 의견은 "주로 의견 기반"이지만 최근 .NET Framework (4.5+)의 새 코드는'WebClient/HttpWebRequest' 및'BackgroundWorker' 대신'HttpClient' 및'Task'를 사용합니다. . 사용자에게 웹 페이지를 보여주고 싶지 않으면 'WebBrowser'를 사용하지 않을 것입니다. HTML Agility Pack을 사용하여 다운로드 한 HTML에서 링크를 추출 할 수 있습니다. 도움이 될지 확실하지 않습니다. :-) – Mark
물론 모든 의견을 환영합니다 :-). 당신의 제안에 감사드립니다! – smtdev