2015-12-24 2 views
0

Возможно ли сохранить источник HTML, захваченный с помощью Selenium (с использованием Excel VBA), в элемент HTMLDocument? Это пример использования Microsoft Internet Controls и Microsoft HTML Object Library для автоматизации Internet Explorer.Сохранить исходный код исходного кода Selenium в элемент типа HTMLDocument

Dim IE as InternetExplorer 
Dim HTML as HTMLDocument 
Set IE = New InternetExplorer 
ie.navigate "www.google.com" 
set HTML = IE.Document 

может быть то же самое с куполом с селеном? Например, что-то вроде (не работает!):

Dim selenium As SeleniumWrapper.WebDriver 
Set selenium = New SeleniumWrapper.WebDriver 
Dim html as HTMLDocument 

selenium.Start "firefox", "about:blank" 
selenium.Open "file:///D:/webpages/LE_1001.htm" 
Set html = selenium.getHtmlSource 'this is not working since .getHtmlSource() 
           'returns a String object but is there a way to store 
           'this html source into a type of HTMLDocument-element 

ответ

1

Надлежащий способ получить DOM с SeleniumBasic:

Sub Get_DOM() 
    Dim driver As New FirefoxDriver 
    driver.Get "https://en.wikipedia.org/wiki/Main_Page" 

    Dim html As New HTMLDocument ' Requires Microsoft HTML Library 
    html.body.innerHTML = driver.ExecuteScript("return document.body.innerHTML;") 

    Debug.Print html.body.innerText 

    driver.Quit 
End Sub 

чтобы получить последнюю версию на сегодняшний день работы с приведенным выше примером: https://github.com/florentbr/SeleniumBasic/releases/latest

1

Это должно работать, чтобы использовать строку в качестве источника для HTML документа:

Set html = New HTMLDocument 
html.body.innerHTML = selenium.pageSource 

изменения: изменен Selenium вызов от getHtmlSource исходный текст. Полный рабочий код выглядит следующим образом. Не уверен, что мы используем ту же версию Selenium, хотя:

Option Explicit 

Sub foo() 

Dim sel As selenium.WebDriver 
Set sel = New selenium.WebDriver 
Dim html As HTMLDocument 

sel.Start "firefox", "about:blank" 
sel.Get "http://www.google.com/" 

Set html = New HTMLDocument 
html.body.innerHTML = sel.PageSource 

Debug.Print html.body.innerText 

End Sub 

со ссылками на библиотеку объектов Microsoft HTML и Селен Type Library (Selenium32.tlb) - с использованием SeleniumBasic версии 2.0.6.0

+0

в строке 'html.body.innerHTML = selenium.getHtmlSource' я получаю' ошибку времени выполнения: 438: Объект не поддерживает это свойство или method' ... любые мысли о это? – user3185735

+1

Я обновил свой ответ - я думаю, что ошибка была вызвана вызовом Selenium, а не из HTMLDocument – barrowc

+0

Большое спасибо за ваш ответ. Он работает с небольшой проблемой, а именно «HTML-код» от оригинала («google.com») имеет гораздо больше символов, чем исходный код, вставленный в объект «HTMLDocument»: у оригинала есть «425.640», а объект HTMLDocument имеет ' 7.814' ... поэтому не весь код скопирован. У вас есть идеи по этому поводу? Спасибо. – user3185735

0

Не совсем уверен, почему вы предпочитаете преобразовывать элемент Selenium в HTMLDocument. Это потребует еще одной ограниченной зависимости от вашего проекта.

Лично я предпочитаю выделять DOM-элемент WebElement. Например:

If (Selenium.FindElementsByClass("qty").Count > 0) Then 
    Dim qtyElement as WebElement: Set qtyElement = Selenium.FindElementByClass("qty") 
End If 

If (Not qtyElement is Nothing) then 
    Dim qtyHtml as String: qtyHtml = qrtElement.Attribute("innerHTML") 
End if 

Debug.Print qtyHtml 
Смежные вопросы