我有以下节点路由使用selenium和chrome驱动程序正常工作并在控制台中返回预期的html:
app.get('/google', function (req, res) {
var driver = new webdriver
.Builder()
.forBrowser('chrome')
.build();
driver.get('https://www.google.com')
driver
.manage()
.window()
.setSize(1200, 1024);
driver.wait(webdriver.until.elementLocated({xpath: '//*[@id="lst-ib"]'}));
return driver
.findElement({xpath: '//*[@id="lst-ib"]'})
.sendKeys('stackoverflow' + webdriver.Key.RETURN)
.then((html) => {
return driver
.findElement({xpath: '//*[@id="rso"]/div[1]/div/div/div/div'})
.getAttribute("innerHTML")
})
.then((result) => {
console.log(result)
})
.then(() => {
res
.status(200)
.send('ok')
});
我还安装了幻像js驱动程序并通过返回URL标题测试它的工作 - 它可以工作。当我使用上面的确切路线并用phantomjs替换chrome时,我没有返回任何结果。没有错误 - 我的控制台中没有打印出来。状态和结果永远不会发送到浏览器,因此它似乎没有单步执行承诺链。
有什么建议吗?
答案 0 :(得分:1)
问题在于根据用户代理呈现了不同的html。通过强制用户代理,我能够检索到我需要的结果。 以下是替换上面的代码片段以使其正常工作。
.Builder()
// .forBrowser('phantomjs')
.withCapabilities(webdriver.Capabilities.phantomjs()
.set("phantomjs.page.settings.userAgent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36"))
.build();