Как получить полный и правильный URL-адрес элемента?

Я пытаюсь найти способ получить правильный и полный URL-адрес ссылки.

Иногда с помощью item.href я получаю полный URL-адрес, а иногда показывает только about:something, about:..something или about:../something.

В этом случае с моим текущим кодом я перебираю все ссылки в этом URL-адресе и хочу получить полный URL-адрес ссылки, связанной с текстом «ВПР». Ответ, который я получаю с моим текущим кодом: about:excel_vlookup.php и если я захочу просто объединить base_url (https://www.w3schools.com/excel/index.php) с Replace("about:excel_vlookup.php","about:",""), я получу неправильный ответ вот так https://www.w3schools.com/excel/index.phpexcel_vlookup.php вместо https://www.w3schools.com/excel/excel_vlookup.php, это правильный полный URL-адрес, когда я навожу указатель мыши на эту ссылку.

Может кто-нибудь знает, как это сделать?

Sub full_url()
Dim htmlDoc As New HTMLDocument
Dim links As Object
Dim i As Integer

    With New ServerXMLHTTP60
        .Open "Get", "https://www.w3schools.com/excel/index.php", False
        .send
        htmlDoc.body.innerHTML = .responseText
    End With
        
    Set links = htmlDoc.body.getElementsByTagName("a")
    
    With links
        For i = 0 To .Length - 1
            If .Item(i).innerText Like "*VLOOKUP*" Then
                Debug.Print .Item(i).href
            End If
        Next
    End With

End Sub

ОБНОВЛЯТЬ Судя по коду @taller, это работает, когда href имеет вид «about:something». Все еще нужно внести некоторые изменения, если href является полным URL-адресом.

Sub full_url1()
    Dim htmlDoc As New HTMLDocument
    Dim links As Object
    Dim i As Integer, sUrl As String, aTxt, iCnt As Long
    Const PREFIX = "about:"
    sUrl = "https://www.w3schools.com/excel/index.php"
    aTxt = Split(sUrl, "/")
    iCnt = UBound(aTxt)
    With New ServerXMLHTTP60
        .Open "Get", sUrl, False
        .send
        htmlDoc.body.innerHTML = .responseText
    End With
    
    Set links = htmlDoc.body.getElementsByTagName("a")
    
    With links
        For i = 0 To .Length - 1
            If .Item(i).innerText Like "*Spaces*" Then
                href = .Item(i).href
                If InStr(1, href, "https://") = 1 Then
                    Debug.Print .Item(i).href
                Else
                    aTxt(iCnt) = Mid(href, Len(PREFIX) + 1)
                    Debug.Print Join(aTxt, "/")
                End If
                Exit For
            End If
        Next
    End With
End Sub
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
1
0
69
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
  • Разделите URL-адрес на массив, используя «/» в качестве разделителя, и замените последний сегмент.

Документация Майкрософт:

Функция разделения

Функция присоединения

Sub full_url()
    Dim htmlDoc As New HTMLDocument
    Dim links As Object
    Dim i As Integer, sUrl As String, aTxt, iCnt As Long
    Const PREFIX = "about:"
    sUrl = "https://www.w3schools.com/excel/index.php"
    aTxt = Split(sUrl, "/")
    iCnt = UBound(aTxt)
    With New ServerXMLHTTP60
        .Open "Get", sUrl, False
        .send
        htmlDoc.body.innerHTML = .responseText
    End With
    
    Set links = htmlDoc.body.getElementsByTagName("a")
    
    With links
        For i = 0 To .length - 1
            If .Item(i).innerText Like "*Spaces*" Then
                href = .Item(i).href
                If InStr(1, href, "https://") = 1 Then
                    Debug.Print .Item(i).href
                ElseIf InStr(1, href, PREFIX) = 1 Then
                    aTxt(iCnt) = Mid(href, Len(PREFIX) + 1)
                    If Left(aTxt(iCnt), 1) = "/" Then aTxt(iCnt) = Mid(aTxt(iCnt), 2)
                    Debug.Print Join(aTxt, "/")
                End If
                Exit For
            End If
        Next
    End With
End Sub

Привет @taller, спасибо за ответ. Он работает очень хорошо, когда href похож на «about:something». У меня возникают проблемы, если href представляет собой строку URL, начинающуюся с «http...». Если у вас есть возможность, пожалуйста, посмотрите мое обновление в исходном сообщении. Когда искомый текст — «Пробелы», базовый URL-адрес меняется, и в этом случае я получил неправильный ответ. Я внес некоторые изменения в ваш код, пытаясь обработать эти случаи, но все равно не удалось.

Rasec Malkic 22.05.2024 07:57

Спасибо. Ваш код теперь исправляет многие другие случаи, у меня только странная ссылка, думаю, она слишком длинная. Дело в sURL =https://www.example.com/somestring/xyz/abc.html и href about:../xyz/abc/some-other-string.html. Следуя вашей идее, я добавил еще одно условие If Left(aTxt(iCnt), 3) = "../" Then aTxt(iCnt) = Mid(aTxt(iCnt), 4), в результате чего этот URL https://www.example.com/somestring/xyz/xyz/abc/some-other-st‌​ring.html, но xyz повторяется. В связи с этим я пытался найти способ, с помощью которого html-библиотека Microsoft выдает полный URL-адрес без этих исправлений, возможно, он не существует.

Rasec Malkic 22.05.2024 10:41

Другие вопросы по теме