Как получить отрендеренный HTML-код с отрисованной страницы JavaScript с помощью Selenium и (PHP) Facebook WebDriver? - PullRequest
0 голосов
/ 07 января 2019

Я пытаюсь получить полный HTML-код веб-сайта после его визуализации с помощью Javascript (act.js) в API WebDriver Facebook с Selenium и Chromedriver, и я не получаю отображаемый HTML-код с

$driver->executeScript("return document.getElementsByTagName('html')[0].innerHTML");

Я хочу получить HTML-код для очистки информации с сайта. Я попытался с помощью сна (10), а затем сохранил снимок экрана, получая исходный код страницы с помощью getPageSource и выполняя сценарий, который должен возвращать что-либо внутри тегов. Изображение ясно показывает, что на странице отображен javascript (как будто я вручную перехожу на URL-адрес и изучаю html, я вижу div и т. Д., Когда javascripts визуализировал страницу), но и сценарий, и источник dossent показывают эти div .

Я также пытался подождать с помощью следующей функции:

$driver->wait(10)->until(
    WebDriverExpectedCondition::presenceOfAllElementsLocatedBy(
        WebDriverBy::className('apartment-wrapper')
    )
);

Но когда я тестирую, он ждет менее 1 секунды.

Я запускаю Selenium в SSH с помощью следующей команды:

xvfb-run java -Dwebdriver.chrome.driver=/path/to/chromedriver -jar /usr/local/bin/selenium-server-standalone.jar -debug true

И мой php код:

namespace Facebook\WebDriver;
require __DIR__ . '/vendor/autoload.php';
use Facebook\WebDriver\Chrome\ChromeOptions;
use Facebook\WebDriver\Chrome\ChromeDriver;
use Facebook\WebDriver\Remote\DesiredCapabilities;
use Facebook\WebDriver\Remote\RemoteWebDriver;
$host = 'http://localhost:4444/wd/hub';
$capabilities = DesiredCapabilities::htmlUnitWithJS(); {
    // For Chrome
    $options = new ChromeOptions();
    $options->addArguments(array(
        '--disable-extensions',
        '--disable-gpu',
        '--disable-dev-shm-usage',
        '--no-sandbox',
        '--window-size=1920,1080',
        '--headless'
    ));
    $capabilities = DesiredCapabilities::chrome();
    $capabilities->setCapability(ChromeOptions::CAPABILITY, $options);
}
$driver = RemoteWebDriver::create($host, $capabilities, 5000);
$driver->get('https://hdejendomme.dk/bolig?query=');
sleep(20);
$driver->takeScreenshot('test.jpg');
$myfile = fopen("script.txt", "wb");
fwrite($myfile, $driver->executeScript("return 
document.getElementsByTagName('html')[0].innerHTML"));
fclose($myfile);
$myfile = fopen("source.txt", "wb");
fwrite($myfile, $driver->getPageSource());
fclose($myfile);

Я ожидаю получить все html, которые в конечном итоге отображаются в браузере, как это подтверждено на скриншоте, сохранены в файл .txt, но это не то, что я получаю. Я получаю только код сценария между тегами тела, а не обработанный html

Как я могу получить рендеринг HTML?

...