从 xpath 中选择 3n+1 个元素中的第一个

Selecting the first of 3n+1 elements from an xpath

如何根据 select 路径中标签的前 3n+1 个元素来实现 selection?例如,假设我有以下 xpath:

//div[@class='ResultsSectionContainer-sc-gdhf14-0 kteggz']/div[@class='Wrapper-sc-11673k2-0 gIBPSk']//div/div/a

取自此 url:

https://www.jobsite.co.uk/jobs?page=2&action=paging_next.html

其中 select 来自每个 a 标签的 @href。这个网站是动态的,所以我需要一些可以概括路径的东西。但是,对于每三个标签,我不需要两个。因此,当 n = 0,1, 2, ...

时,我需要所有属于 3n+1 selections 的 href

有没有办法实现这个?

例如,我可以 select 的 href 总数是 75,因此我正在寻找 25 个元素作为 75/3 = 25,因为我们除以前导系数。

像这样的 selection 可以在 python 中完成吗?否则,给定一个一般的 selection:

a*n+c

当 select 用于 xpath 时,如何实现这样的 selection?

尽管如此,如果在 select 中有更简单的替代方法,请使用 url 中的那些 href,因为我只能想到这种方式。不过,我认为这种方法可以在不同的 urls 上泛化更多。

如果有 CSS-select 或版本,也将不胜感激!

您在这里所需要的只是使用正确的定位器。
我猜你是想获取所有工作链接?
如果是这样,而不是这个 //div[@class='ResultsSectionContainer-sc-gdhf14-0 kteggz']/div[@class='Wrapper-sc-11673k2-0 gIBPSk']//div/div/a
非常长、复杂且脆弱的 XPath 你可以使用这个 XPath:

//a[@data-at='job-item-title']

如果您仍然需要从列表中 select 一些与定位器匹配的特定元素,您可以使用 driver.find_elements_by_whatever 将所有这些元素收集到列表中,然后循环遍历此列表有你需要的条件。

XPath 过滤器谓词 [position() mod 3 = 1] 选择所有基于 1 的位置为 3n+1 的元素(对于某个整数 n)。