python - 如何尽快找到元素,不要等待硒页面加载
问题描述
我想在 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})
但是在捕获错误之后,所有的承诺都会超时
环境
节点
"selenium-webdriver": "^4.0.0-alpha.1"
铬驱动程序 73.0.3683.20
最后,我的 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()
})()
解决方案
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)
推荐阅读
- python - How to set a bias on multiple methods within a class?
- python - 计算熊猫数据框中的持续时间
- mongodb - MongoDB on Docker for Windows ~ 导出/导入数据
- networking - 如何调试 Istio 特使连接问题?
- python - 设置描述符的默认(初始)值
- mysql - SQL 主键 (ID) 自动从头开始
- git - 如果我想用 origin master 覆盖 origin qa,“git push origin master:qa --force”是否有效?
- git - git - Master 构建正常,但是从 master 获取干净的分支会使构建失败
- jquery - 自定义客户端验证 jQuery 适配器不会在 ASP.Net Core 中触发
- dart - Dart如何声明列表的可增长列表