【问题标题】:How to locate exact text on xpath element?如何在 xpath 元素上找到确切的文本?
【发布时间】:2021-09-12 06:58:14
【问题描述】:

我正在尝试找到与确切文本“制造商”匹配的 xpath,但它不起作用。

我不能使用“包含”,因为另一个 xpath 元素中包含文本“制造商停产”。 我需要一个解决方案,我可以在其他 url 上使用相同的东西,有时没有其他元素包含文本“制造商”,如“制造商停产”,只有“制造商”

网址是https://www.amazon.com/BEAKEY-Foundation-Blending-Flawless-Multi-colored/dp/B01F36JEXE/ref=sr_1_22?dchild=1&keywords=cosmetics&qid=1625014752&sr=8-22 如果有人需要参考

这是我在尝试搜索“制造商”时看到的 image of error

【问题讨论】:

  • 您绝对可以按照我的建议使用“包含文本”,直到页面上出现包含此文本的其他元素并且不需要的元素位于最后为止。

标签: python selenium web-scraping xpath beautifulsoup


【解决方案1】:

该页面上有 4 个制造商。

你可以试试这个 xpath :

(//ul[contains(@class, 'a-unordered-list')]/descendant::span[@class='a-text-bold'])[1]

匹配

Is Discontinued By Manufacturer ‏ : ‎ No

(//ul[contains(@class, 'a-unordered-list')]/descendant::span[@class='a-text-bold'])[5]

匹配:

Manufacturer ‏ : ‎ BEAKEY

【讨论】:

  • 我认为使用 [1] 或 [5] 不适合我,因为我需要对其他 url 执行此操作,而这个恰好有两个包含“制造商”一词的元素而其他网址只有一个“制造商”
  • 下面都有,Ul > LI > span > span。我可以告诉你它会起作用的。在您先尝试之前,不要说它不会起作用。如果您在上面看到,我在 xpath 中根本没有使用制造商一词。第一个 xpath 代表 `Is Discontinued By Manufacturer ‏ : ‎ No` 而第二个代表 Manufacturer ‏ : ‎ BEAKEY
  • 你认为UPC 会一直出现在不同的页面中吗?我们可以构造一个基于UPC的xpath来定位Manufacturer
【解决方案2】:

因为有 2 个带有文本“制造商”的 span 元素,所以它应该适合那里:

"(//span[contains(text(),'Manufacturer')])[last()]"

【讨论】:

  • 这对我不起作用,因为当我转到不同的网址时,没有其他带有“制造商”的元素,我必须调用“(//span[contains(text( ),'Manufacturer')])[1]" 而不是 [2] 在那个不同的 url 上
  • 我已更新定位器。这也适用于单个元素
【解决方案3】:

如果您想精确匹配文本节点或元素的内容,请使用“=”运算符,而不是 contains()

使用contains() 代替“=”是一个常见的XPath 错误。事实上,一个常见的错误是根据函数名称猜测函数的作用,而不是阅读规范。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-29
    • 1970-01-01
    • 2013-05-21
    • 2012-12-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多