如何检查元素是否存在于 xpath 中,如果不存在则返回空/无值?

哈里·金

我试图从一个网站上抓取数据,给出一个存储在“数据”中的 url 列表。

我注意到一些 url 没有“og_price”和“discount”的 xpath 并且我收到 NoSuchElement 的错误或者只是直接说“og_price”和“discount”没有定义大概是因为某些 url 没有那个 xpath .

我想检查一个 url 中是否存在 xpath(我试图用 try-except 来做)并返回一个空值或只是字符串“no”,但我在稍后调用“.text”时被困在如何做到这一点上在“og_price”和“discount”上会说“str”对象没有属性“.text”

for url in data:
    driver.get(url)
    item_name = driver.find_element_by_xpath('//span[@id="productTitle"]')
    brand_name = driver.find_element_by_xpath('//*[@class="a-spacing-small"][.//*[contains(.,"Brand")]]/td[@class="a-span9"]/span')
    price = driver.find_element_by_xpath('//div[@class="a-section a-spacing-micro"]/span[@id="price_inside_buybox"]')
    try: 
        og_price = driver.find_element_by_xpath('//span[@class="priceBlockStrikePriceString a-text-strike"]')
        discount = driver.find_element_by_xpath('//td[@class="a-span12 a-color-price a-size-base priceBlockSavingsString"]')
    except NoSuchElementException:
        og_price = null
        discount = null
    

    row = { 'Item Name': item_name.text,
            'Brand Name': brand_name.text,
            'Price': price.text,
            'Original Price': og_price.text,
            'URL': url
          }
维尼什

@Harry Kim 检查元素是否存在的正确方法是像上面那样将检查包装在 try/catch 块中。要解决空对象异常的问题,您可以在将元素分配给行映射之前进行 if 检查。就像是,

    try: 
        og_price = driver.find_element_by_xpath('//span[@class="priceBlockStrikePriceString a-text-strike"]')
        discount = driver.find_element_by_xpath('//td[@class="a-span12 a-color-price a-size-base priceBlockSavingsString"]')
    except NoSuchElementException:
        og_price = None
        discount = None
    

    row = { 'Item Name': item_name.text,
            'Brand Name': brand_name.text,
            'Price': price.text,
            'URL': url
          }
    if og_price is not None:
          row["Original Price"] = og_price.text
    else:
          row["Original Price"] = "N/A"

此外,如果您有一个明确定义的 css 标签,那么使用 find_element_by_css_selector 或 find_element_by_id 之类的函数也是一个好主意。仅当目标元素确实具有正确的 id 或 css 标签时,我们才使用 Xpath。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

检查div是否不存在于javascript中

如何使用XPath检查元素列表中是否存在值?

检查元素是否存在于mvc formcollection中

如何检查密钥是否存在于json中

ngIf检查类是否存在于元素上

如何检查密钥是否存在于集合中

如何检查(Sub)Array是否存在于数组中

如何检查键是否存在于对象数组中

检查值是否存在于集合或数组中,如果不存在,则将其添加

检查元素是否存在于Haskell的列表中

如何检查元素是否存在于没有for循环的数组中?

如何检查值是否存在于struct中?

如何检查给定的int是否存在于数组中?

如何检查方法是否存在于freemarker中?

如何检查set是否存在于Java中?

如何检查数组的元素是否存在于Javascript的字符串中?

如何检查元素是否已存在于列表中

XPath选择元素(如果不存在)

检查元素是否存在于数组中

函数检查元素是否存在于列表中

如何检查元素是否存在于数组对象中

如何检查元素是否存在于对象中?

如何检查类是否已存在于 Django 中?

如何检查特定属性的元素是否存在于列中?

PostgreSQL:如何检查节点是否存在于 XML 中

Elixir:如何检查元素是否存在于数组中元组的特定索引中?

如何检查元素是否存在于 Cypress 的 DOM 中?

如何检查我的变量是否存在于对象中?

如何检查列表 1 中的任何元素是否不存在于列表 2 中?- Python