Я создал макрос, используя селен, чтобы получать ссылки на разные посты с веб-сайта и анализировать заголовок каждого поста после перехода на целевую страницу. Мой первый пример просто делает то, что, как и ожидалось, написано с использованием одной подпрограммы.
Я бы хотел изменить свой макрос, используя две подпрограммы и повторно используя один и тот же драйвер между двумя подпрограммами, как я пытался во втором примере.
Рабочий (с использованием одного саба):
Sub FetchLinks()
Const link$ = "https://stackoverflow.com/questions/tagged/web-scraping"
Dim driver As New ChromeDriver, post As Object
Dim itmLink As Variant, R&, iDic As Object
Set iDic = CreateObject("Scripting.Dictionary")
With driver
.get link
For Each post In .FindElementsByCss(".summary .question-hyperlink", timeout:=10000)
iDic(post.Attribute("href")) = 1
Next post
For Each itmLink In iDic.keys
driver.get itmLink
Debug.Print .FindElementByCss("h1 > a.question-hyperlink").Text
Next itmLink
End With
End Sub
Невозможно заставить его работать (попытался передать драйвер в другой сабвуфер для повторного использования):
Sub FetchLinks()
Const link$ = "https://stackoverflow.com/questions/tagged/web-scraping"
Dim driver As New ChromeDriver, post As Object
With driver
.get link
For Each post In .FindElementsByCss(".summary .question-hyperlink", timeout:=10000)
FetchData driver, post.Attribute("href")
Next post
End With
End Sub
Sub FetchData(ByRef driver, ByRef nlink As String)
Dim elem As Object
With driver
.get nlink
Debug.Print .FindElementByCss("h1 > a.question-hyperlink").Text
End With
End Sub
Как я могу разделить chromedriver между двумя подпрограммами, чтобы очистить некоторый контент от внутренних страниц?