Я открываю новую ссылку в своем коде VBA, и она открывается только в новом окне, поэтому код не может перейти в новое окно.
Я в тупике, это мой код.
<div class = "table-r">
<table class = "table-c">
<tbody>
<tr class = "bg">
<td class = " np"> <a title = "comm" href = "logcomm-e.asp?id=3" rel = "history">3</a> </td>
<td class = " np"> <a title = "comm" href = "logcomm-e.asp?id=2" rel = "history">2</a> </td>
<td class = " np"> <a title = "comm" href = "logcomm-e.asp?id=1" rel = "history">1</a> </td>
</tr>
</tbody>
</table>
</div>
Sub IEScrape()
Dim IE As Object
Set IE = New InternetExplorerMedium
With IE
.Visible = True
.Navigate "inhouse web site"
While IE.readyState <> 4
DoEvents
Wend
.document.querySelector("a[href*='logcomm-e.asp?id=']").Click
While IE.readyState <> 4
DoEvents
Wend
End With
Set IE = Nothing
ActiveWorkbook.Save
End Sub
Я ожидаю, что когда я запускаю элемент get и печатаю его в ячейку, это из новой ссылки href. Я не могу сразу перейти по ссылке, потому что каждый день появляется новая ссылка, и href обновляется. с помощью querySelector он нажимает на последнюю запись. Сейчас в 3, завтра в 4 и так далее.
Я не могу, так как он получает последнюю ссылку, и каждый день появляется новая, сегодня №3, завтра №4 и так далее, спасибо за предложение.
Я не имею в виду «жестко кодировать это», я имел в виду чтение href
с открытой страницы, а затем переход туда. См. этот вопрос - stackoverflow.com/questions/32677931/vba-to-get-the-href-valueue
Не уверен, что вы имеете в виду, если бы вы могли предоставить код, который я мог бы попробовать, тогда это имело бы смысл. Я не думаю, что предоставленная вами ссылка относится к моей.
Попробуйте получить href
из .document.querySelector("a[href*='logcomm-e.asp?id=']").
с чем-то вроде someString = .document.querySelector("a[href*='logcomm-e.asp?id=']").href
(не проверял). А потом напишите IE.navigate someString
.
о, хорошо, я пробовал что-то подобное раньше, но это не сработало, но теперь это работает, спасибо!
Пожалуйста. Я добавил последний комментарий к ответу. Не стесняйтесь редактировать его на код, который работает :)
да, я только что сделал это .Navigate (.document.querySelector("a[href*='logcomm-e.asp?id=']").href)
в основном ваше предложение, еще раз спасибо.
Получение свойства .href
объекта querySelector
и последующий переход к нему должно работать:
With IE
Dim hrefString as String
hrefString = .document.querySelector("a[href*='logcomm-e.asp?id=']").href
.Navigate = hrefString
End With
немного быстрее было бы использовать селекторы классов и типов (но + к @vityata's), чтобы получить href и перейти к нему. QuerySelector возвращает первое совпадение, которое, по-видимому, будет последним в вашем случае.
ie.Navigate2 .document.querySelector(".table-c a").href
В качестве обходного пути - можете ли вы получить адрес href нового окна и открыть его через
IE.Navigate newAddress
? Это должно работать, и я думаю, это будет надежно, если вы правильно управляете закрытием.