我想使用nodejs中的webdriver来控制一个使用ajax非常重的网站,特别是它总是对服务器有http请求。
当我使用driver.executeScript时,我发现回报的承诺几乎从未重获。
我查看了这个网站,发现它使用keep-alive http请求循环与服务器进行通信。这意味着,它将始终至少有一个实时连接到服务器30,然后另一个连接到另一个30,一次又一次。这使得document.readyState保留了interactive而不是completed,然后driver.executeScript几乎永远被阻塞。
我尝试过driver.manage().timeouts().pageLoadTimeout(PAGE_LOAD_TIMEOUT_MS),但它只在超时后抛出异常。
我还试图通过在浏览器窗口上按ESC键来停止连接。之后,driver.executeScript似乎可以立即运行。但是我没有在window.stop() API中找到任何类似WebDriver的函数。
那么,有没有办法解决这个问题呢?任何一个都应该是可以的,比如:
executeScript,不管页面是否加载;driver.browser.stop()这样的webdriver可以在页面中停止所有的活动连接。重新生成此问题的Nodejs代码:
const WebDriver = require('selenium-webdriver')
const driver = new WebDriver.Builder()
.withCapabilities(
WebDriver.Capabilities.firefox()
.set('webdriver.load.strategy', 'unstable')
).build()
driver.get('https://wx.qq.com/')
driver.executeScript('return "99% will be blocked, 1% luck to return"')
.then(function (ret) {console.log(ret)})谢谢!
更新: 我发现在火狐中将
webdriver.load.strategy设置为unstable是有帮助的。FirefoxProfile fp = new FirefoxProfile(); fp.setPreference("webdriver.load.strategy", "unstable"); WebDriver driver = new FirefoxDriver(fp);https://github.com/seleniumhq/selenium-google-code-issue-archive/issues/4993 https://w3c.github.io/webdriver/webdriver-spec.html#page-load-strategies-1
来自其他人的链接也有同样的问题:http://grokbase.com/t/gg/webdriver/1263dbyws6/how-to-click-stop-button-or-equivalent
发布于 2016-05-06 15:32:49
通过使用Thread.sleep(secs);。例如,我们希望在3秒内加载一个页面,这意味着我们编写了thread.sleep(30000);。
https://stackoverflow.com/questions/37071807
复制相似问题