gpt4 book ai didi

xpath - 网页抓取选择器

转载 作者:行者123 更新时间:2023-12-03 17:20:26 25 4
gpt4 key购买 nike

你从什么层次开始你的选择器?
似乎有从目标元素的容器开始的约定,但为什么不从目标元素本身开始,特别是在 id 或以通配符加唯一标识符开头的情况下?
递归下降似乎是每个人最好的 friend 。

最佳答案

XPaths 和 Css-Selector 非常通用,可以用许多不同的方式描述同一个元素——即一个元素有无数个可能的定位器来描述它。目标是获得满足开发人员需求的东西,其中可能包括可读性、独特性和/或适应性。

考虑以下 html 示例:

<div id='mainContainer'>
<span>some span</span>
</div>

如果我试图为 <span> 制作定位器元素,我不会选择 //span ,因为这可能会产生太多的结果。相反,您可以从具有 id 的父级开始,然后继续跨度: //*[@id='mainContainer']/span ,或者: //span[parent::*[@id='mainContainer']] .哪个 XPath 更好?无论您个人认为哪个更具可读性。我同意你的观点,第一个例子似乎更常见,尽管我自己更倾向于后者。

有时,以某种方式制作定位器的目的是具有适应性。例如,我很少写这样的定位器: //*[@class='fooBar'] .原因是因为在现代 Web 开发中,类频繁地来来去去,并且该元素的类很可能会在最轻微的微风中改变。相反,你可以写 //*[contains(@class,'fooBar')] .现在,当开发人员进入并添加一个纯样式类时,您不必返回并更新所有 selenium 测试。这也是我经常使用通配符的原因。如果开发人员进入并更新 divspan ,我的测试仍然有效。

正如@Gilles Quenot 评论的那样,假设 id 是唯一的并不总是安全的。许多网站是由某人的失业叔叔编写的,他在 86 年上过 html 类(class)。他们很糟糕,根本不关心标准或审计。这是您需要在定位器中包含足够信息以指定您正在谈论的确切元素/元素的另一个原因,但不需要太多信息来描述太多元素。

另一个评论是 XPaths 是双向的,而 Css-Selectors 不是。这意味着 XPath 可以从子到父,从父到子,而 Css-Selectors 只能从父到子。这会影响您从哪个节点开始,并且可能是您看到更多 Css-Selector 从父/祖先节点开始的原因。

TL;DR 没有惯例,只是个人喜好。做满足您需求的事情。

关于xpath - 网页抓取选择器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59316261/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com