如何检查元素是否存在于 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 条评论
登录 后参与评论

相关文章

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

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

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

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

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

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

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

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

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

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

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

检查div是否不存在于javascript中

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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