在使用Selenium和Chromedriver在Facebook WebDriver API中用Javascript(react.js)渲染网站后,我试图获取网站的完整HTML,而我没有使用
$driver->executeScript("return document.getElementsByTagName('html')[0].innerHTML");
我想获取HTML以便从网站上抓取一些信息。我尝试了sleep(10),然后保存了一个屏幕截图,使用getPageSource获取页面源,并执行了一个脚本,该脚本应返回标记内的所有内容。该图像清楚地表明页面已渲染了javascript(就像我手动导航到url并研究html一样,当javascripts渲染了页面时,我看到了div等),但是脚本和源代码都显示了这些div。
我一直试图等待以下功能:
$driver->wait(10)->until(
WebDriverExpectedCondition::presenceOfAllElementsLocatedBy(
WebDriverBy::className('apartment-wrapper')
)
);
但是当我测试时,它只等待不到1秒。
我使用以下命令在SSH中启动Selenium:
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文件中,但这不是我想要的。我只是在body标签之间获取脚本代码,而不是呈现的html
如何获取渲染的html?