【问题标题】:How to check if an object is visible in a webpage by using its xpath?如何使用 xpath 检查对象在网页中是否可见?
【发布时间】:2016-03-12 16:15:59
【问题描述】:

我正在使用 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”做同样的事情? 谢谢

【问题讨论】:

    标签: r selenium xpath web-scraping rselenium


    【解决方案1】:

    要检查元素是否存在,请使用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 异常。

    【讨论】:

    • 感谢您的回复。我尝试运行您的代码来检查元素是否存在,但出现以下错误: if (remDr$findElements(using = "xpath", x_path)) { : argument is of length zero
    • 我想我明白了,我检查列表的长度,如果它为零,它是一个空列表。
    • 您用于检查可见性的第二个代码对我不起作用。我在 R 中找不到 isElementDisplayed 函数?有什么建议?谢谢@alecxe
    • @Mohaa 我已经改进了示例,希望对您有所帮助。我在 R 方面很糟糕,如果我在代码中有语法错误,请原谅我。这个想法应该很清楚。看一个例子isElementDisplayed()用法here
    • 这不适用于我现在拥有的当前版本。 FF 52 上的 RSelenium 3。
    猜你喜欢
    • 2014-04-22
    • 2014-04-14
    • 1970-01-01
    • 2019-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-17
    • 2012-10-12
    相关资源
    最近更新 更多