首页 > 解决方案 > 如何尽快找到元素,不要等待硒页面加载

问题描述

我想在 DOMcontentLoad 时使用 selenium 尽快找到元素

如何findElement执行不等到页面加载?

var webdriver = require('selenium-webdriver'),
    By = webdriver.By,
    until = webdriver.until

;(async function main(){
    driver =await new webdriver.Builder().forBrowser('chrome').build()
    await driver.get('some url')//wait until it throw timeout error
    ele=await driver.findElement(By.id('username'))
    ele.sendKeys('xxx')
})()

我尝试使用

await driver.manage().setTimeouts({pageLoad:3e3,script:2e3})

但是在捕获错误之后,所有的承诺都会超时

环境


最后,我的 nodejs 解决方案:

var {Options} = require('selenium-webdriver/chrome'),
    {Builder,By,until,Capabilities}=require('selenium-webdriver'),
    driver;
;(async function main(){
    driver =await new Builder()
        .withCapabilities(
            Options.chrome().setPageLoadStrategy('none')
        ).build()
})()

标签: pythonnode.jsseleniumselenium-webdriver

解决方案


Selenium Web 驱动程序支持三种页面加载策略。

普通的

这种策略导致 Selenium 等待整个页面加载(下载和解析 html 内容和子资源)。

渴望的

这种策略导致 Selenium 等待 DOMContentLoaded 事件(仅下载和解析 html 内容)。

没有任何

此策略导致 Selenium 在完全接收到初始页面内容(已下载 html 内容)后立即返回。


您必须将页面加载策略设置为eager. 虽然 chrome 不支持“eager”,但您可以将其设置为“none”。然后你需要同步驱动等待一些元素。

Python

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

option = Options()
option.set_capability("pageLoadStrategy","eager")

driver = webdriver.Chrome(executable_path="chromedriver.exe",options=option)


推荐阅读