2016-01-17 2 views
0

Я делаю скрипт для автоматизации некоторых действий. Я открываю страницу с Selenium Wrapper (chrome), а затем жду 5 секунд (на странице есть javascript/ajax, который меняет страницу), затем я прошу исходный код. Я получаю исходный html не с изменениями js и ajax (если я вручную перехожу к навигатору и щелкните правой кнопкой мыши -> исходный код, я получаю правильный исходный код).Selenium Wrapper не получает правильную страницу источника html

Мой VBA код:

Dim selenium As New SeleniumWrapper.WebDriver 

selenium.Start "chrome", "http://about:blank" 
selenium.setTimeout ("120000") 
selenium.setImplicitWait (5000) 
intRowPosition = 2 
selenium.Open "http://www.somepage.com/%3Fstart%3D1" 
selenium.sleep ("5000") 

msgbox(selenium.getHtmlSource) 

Любая идея, как решить эту проблему?

ответ

0

Документация для getPageSource, прямо говорится, что

Если страница была изменена после загрузки (например, Javascript) нет никакой гарантии, что возвращаемый текст является модифицированной страницы.

Однако это может быть связано с синхронизацией. Я не знаком с базой VBA, поэтому не знаю, имеет ли он эквивалент explicit wait, но если это так, то лучше подождать определенного условия, которое возникает только при полной загрузке страницы («с помощью js и ajax изменения, как вы ожидаете, вместо «сна», который не гарантирует, что страница готова к концу ожидания.

+0

Я не думаю, что это вопрос ждать, так как я с той же проблемой, когда я отладки и ждать looong time до последней инструкции –

+0

@MarcoMartin довольно легко реализовать код, который вы использовали на одном из «официальных» драйверов, т. е. драйвер csharp. Поэтому, если проблема на странице не может быть реплицирована другим драйвером, это, вероятно, ошибка реализации драйвера, и в этом случае вам придется либо сообщить об этом разработчику этого драйвера, либо переключиться на другой драйвер –

0

SeleniumWrapper устарел и больше не поддерживается. Он был заменен SeleniumBasic: https://github.com/florentbr/SeleniumBasic/releases/latest

Чтобы получить источник страницы:

Dim driver As New ChromeDriver 
driver.Get "https://en.wikipedia.org" 

MsgBox driver.PageSource 
MsgBox driver.ExecuteScript("return document.documentElement.innerHTML") 
MsgBox driver.ExecuteScript("return document.body.innerHTML") 
Смежные вопросы