首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在selenium中的WebDriver加载页面之前执行selenium?

如何在selenium中的WebDriver加载页面之前执行selenium?
EN

Stack Overflow用户
提问于 2016-05-06 11:58:02
回答 2查看 3.2K关注 0票数 2

我想使用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的函数。

那么,有没有办法解决这个问题呢?任何一个都应该是可以的,比如:

  1. 现在运行executeScript不管页面是否加载
  2. driver.browser.stop()这样的webdriver可以在页面中停止所有的活动连接。

重新生成此问题的Nodejs代码:

代码语言:javascript
复制
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

EN

Stack Overflow用户

发布于 2016-05-06 15:32:49

通过使用Thread.sleep(secs);。例如,我们希望在3秒内加载一个页面,这意味着我们编写了thread.sleep(30000);

票数 -3
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37071807

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档