8

我正在使用 R 中的 RSelenium 包进行网页抓取。有时在加载网页后,需要检查网页中是否可见对象。例如:

library(RSelenium)

#open a browser
RSelenium::startServer()
remDr <- remoteDriver$new()
remDr <- remoteDriver(remoteServerAddr = "localhost" 
                  , port = 4444
                  , browserName = "firefox")
remDr$open()

remDr$navigate("https://www.google.com")
#xpath for Google logo
x_path="/html/body/div/div[5]/span/center/div[1]/img"

我需要做这样的事情:

if (exist(remDr$findElement(using='xpath',x_path))){
print("Logo Exists")
}

我的问题是我应该为“存在”使用什么功能?上面的代码不起作用,它只是一个伪代码。我还找到了一个代码,可以使用它们的“id”检查对象,这里是:

remDr$executeScript("return document.getElementById('hplogo').hidden;", args = list())

上面的代码只适用于“id”,我应该如何使用“xpath”做同样的事情?谢谢

4

1 回答 1

6

要检查元素是否存在,请使用findElements()方法。如果没有找到与定位器匹配的元素,它将返回一个空列表 -根据定义,一个空列表是“假的”

if (length(remDr$findElements(using='xpath', x_path))!=0) {
    print("Logo Exists")
}

要检查元素是否可见,请使用isElementDisplayed()

webElems <- remDr$findElements(using='xpath', x_path)
if (webElems) {
    webElem <- webElems[0]
    if (webElem$isElementDisplayed()[[1]]) {
        print("Logo is visible")
    } else {
        print("Logo is present but not visible")
    }
} else {
    print("Logo is not present")
}

要检查是否存在,或者代替findElements(),您可以使用findElement()和处理NoSuchElement异常。

于 2015-12-10T03:52:33.080 回答