如何检查HTML文档中是否存在指定XPath的元素?

3
我是一名Python工程师,正在使用Selenium。我想知道如何判断HTML页面中是否存在指定XPath的元素。请问应该怎么做?

示例输入:

chek_if_exists("xpath")

输出:True或False。

您可以简单地检查XPath的Web元素是否存在。如果给定XPath没有WebElement,则该XPath不存在。 - Saritha G
3个回答

6

您需要编写一个函数来检查元素是否存在。如果元素存在,该方法将返回True,如果无法找到元素并抛出异常,则返回False。

def hasXpath(xpath):
    try:
        self.browser.find_element_by_xpath(xpath)
        return True
    except:
        return False

2
我们可以编写一个函数,如果xpath存在,则返回True示例:
content = """<html>
    <head>
    </head>
    <body>
        <div class="start">
            <p>I am P</p>
        <div/>
        <div class="start">
            <p>I am P</p>
        <div/>
    </body> 
</html>"""


def isXpath(content, xpath):
    """
        Return True if Xpath present else return False
    """
    import lxml.html as PARSER
    root = PARSER.fromstring(content)
    if root.xpath(xpath):
        return True
    return False

print "Debug 1:", isXpath(content, "//div[@class='start']")

print "Debug 2:", isXpath(content, "//div[@id='start']")

输出:

Debug 1: True
Debug 2: False

我们可以使用以下内容来替换上面代码中的if循环
return bool(root.xpath(xpath))

1
你可能希望将返回条件简化为 return bool(root.xpath(xpath)) - Winny
1
@Winny:是的,在回答中添加了。谢谢。我之前不知道这个。 - Vivek Sable

0
假设你有一个链接:
  link <-"http://www.skelbiu.lt/skelbimai/diplominiai-lt-4792675.html"

首先,您需要获取响应:

  response <- GET(link)

然后,加载文档:

  doc <- content(response,type="text/html", encoding = "UTF-8")

接下来,您想要提取广告的标题。您可以通过检查文本长度是否不等于0来检查节点是否存在。如果是这样,则存在该节点或文本,因此将返回“元素不存在”。
  name <- ifelse(length(xpathSApply(doc, "//title",xmlValue))!=0,
                        xpathSApply(doc, "//title",xmlValue),
                        "Element does not exist")

这个简单示例的基本思想是使用ifelse语句并检查返回的属性内容的长度。
希望对你有所帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接