RSelenium中remDr$switchToWindow()无法切换窗口问题求助
解决RSelenium中
switchToWindow无效的问题 我之前也碰到过类似的窗口切换失效的情况,大概率是新窗口还没完全初始化完成,你就尝试获取句柄并切换,导致操作没有实际作用。下面给你几个可行的解决方案:
方案一:等待新窗口加载完成后再切换
在打开新窗口后,先等待窗口数量增加,确保新窗口已经被浏览器创建,再去获取句柄并切换:
# 记录初始窗口数量 initial_window_count <- length(remDr$getWindowHandles()) # 打开子窗口(保留你的原有操作) webEl <- remDr$findElement("xpath","//*[@id='mw-content-text']/div/div[5]/div/ul/li[1]/a") remDr$mouseMoveToLocation(webElement = webEl) win.hand.m <- remDr$getCurrentWindowHandle() webEl$sendKeysToElement(sendKeys = list("\ue008\ue007")) # 等待新窗口出现(超时10秒) remDr$waitFor( function() length(remDr$getWindowHandles()) > initial_window_count, timeout = 10000 ) # 重新获取所有窗口句柄并切换 win.hands <- remDr$getWindowHandles() win.hand.c <- setdiff(win.hands, win.hand.m)[[1]] remDr$switchToWindow(win.hand.c) # 验证切换结果 remDr$getCurrentWindowHandle()[[1]] == win.hand.c # 现在应该返回TRUE
方案二:用JavaScript直接打开新窗口(更可靠)
有时候按键组合打开新窗口的方式会有兼容性问题,改用JavaScript直接调用window.open能避免这类问题:
# 获取目标链接的href属性 target_href <- webEl$getElementAttribute("href")[[1]] # 用JS打开新窗口 remDr$executeScript(paste0("window.open('", target_href, "');")) # 同样等待窗口数量变化后切换 initial_window_count <- length(remDr$getWindowHandles()) remDr$waitFor( function() length(remDr$getWindowHandles()) > initial_window_count, timeout = 10000 ) win.hands <- remDr$getWindowHandles() win.hand.c <- setdiff(win.hands, win.hand.m)[[1]] remDr$switchToWindow(win.hand.c)
额外排查点
- 检查你的chromedriver版本和Chrome浏览器版本是否严格匹配(你用的是76.0.3809.126,确保Chrome也是对应版本)
- 如果还是不行,可以尝试重启RSelenium会话,有时候会话状态异常也会导致这类操作失效
内容的提问来源于stack exchange,提问作者natedjurus
相关产品推荐
相关产品推荐

