Я написал код парсинга URL, который работает в bing и Google и отлично перемещается по страницам.
Сейчас я пытаюсь настроить его для работы на duckduck go .com. У меня он работает, поэтому он соскабливает с одной страницы. ЕДИНСТВЕННАЯ проблема, с которой я сталкиваюсь, - это Я НЕ МОГУ тренироваться, как заставить его показывать больше результатов, как ориентироваться. Он извлекает результаты только с первой страницы.
У Google и Bing есть следующая кнопка, по которой код может перемещаться, однако я не могу понять, как это сделать для duckduck go. Я застрял на этом последнем бите. Остальное в порядке. Результаты поиска, страницы для навигации и 2x задержки поступают из Sheet10
Мне НЕ нужно полностью переписывать код. Все, что мне нужно, это то, как перемещаться по страницам.
Private Sub duckduckgoScraper()
'''DuckDuckGo URL SCRAPER
Dim ie As Object
Dim HTMLdoc As Object
Dim nextPageElement As Object
Dim div As Object
Dim link As Object
Dim url As String
Dim pageNumber As Long
Dim i As Long
Dim myCounter As Long
'''Takes search from Sheet10 to DuckDuckGo
url = "https://duckduckgo.com/?q=" & Replace(Worksheets("Sheet10").Range("G17").Value & Range("H17").Value, " ", "+")
Set ie = CreateObject("InternetExplorer.Application")
With ie
.Visible = True
.navigate url
Do While .Busy Or .readyState <> 4
DoEvents
Loop
End With
Application.Wait Now + TimeSerial(0, 0, 5)
Set HTMLdoc = ie.document
'''Searches URLS and places them in Sheet called Sheet2 ROW 2 Column A
With Sheets("Sheet2")
pageNumber = 1
i = 2
Do
For Each div In HTMLdoc.getElementsByTagName("div")
If div.getAttribute("class") = "result__body links_main links_deep" Then
Set link = div.getElementsByTagName("a")(0)
.Cells(i, 1).Value = link.getAttribute("href")
i = i + 1
End If
Next div
'''Searches Number of Pages entered in Sheet10
If pageNumber >= Replace(Worksheets("Sheet10").Range("I17").Value, " ", "+") Then Exit Do
On Error Resume Next
'''################################################################################################
'''########################## **I am stuck here, the rest is fine** #############################
'''################################################################################################
Set nextPageElement = HTMLdoc.getElementByClassName("I NEED THIS BIT, I AM STUCK HERE")
If nextPageElement Is Nothing Then Exit Do
'''Scrolls Down the Browser
ie.document.parentWindow.Scroll 0&, 99999
'''Random delay from Max number entered in Sheet10
Application.Wait Now + TimeSerial(0, 0, Application.RandBetween(1, Worksheets("Sheet10").Range("J17").Value))
'''Click the next page
nextPageElement.Click
Do While ie.Busy Or ie.readyState <> 4
DoEvents
Loop
'''Random delay from Max number entered in Sheet10
Application.Wait Now + TimeSerial(0, 0, Application.RandBetween(1, Worksheets("Sheet10").Range("K17").Value))
Set HTMLdoc = ie.document
''' Delete duplicates
Sheet2.Columns("A").RemoveDuplicates Columns:=Array(1), Header:=xlYes
''' Delete Row If Blank
Sheet2.Columns("A").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
pageNumber = pageNumber + 1
myCounter = myCounter + 1
Worksheets("Sheet10").Range("G6").Value = myCounter
Loop
End With
'''Quite browser and clear
ie.Quit
Set ie = Nothing
Set HTMLdoc = Nothing
Set nextPageElement = Nothing
Set div = Nothing
Set link = Nothing
''' To stop the code early, change page number to 0, else code will finish when page number completed
If Sheet10.Range("I17") = 0 Then
Complete.Show
Termination.Hide
ElseIf Sheet10.Range("I17") > 0 Then
Complete.Show
End If
End Sub
Что я пробовал до сих пор Я попробовал биты, выделенные желтым, но не могу работать. При нажатии следующей кнопки rld-1 изменится на rdl-2 и 3. Это единственное, на чем я сейчас застрял.
введите описание изображения здесь
Подскажите, пожалуйста. Я думаю, это может быть из-за того, что это JavaScript, но у меня ограниченные знания в программировании, и я застрял на этом уже несколько дней.
Как всегда, заранее спасибо