如何在不考虑 div 索引的情况下识别 XPath?

时间:2021-04-25 15:11:18

标签: python html xml selenium xpath

我正在编写一个从网站上抓取信息的 python 代码,但我必须首先摆脱一些 cookie 弹出窗口。要单击正确的按钮,我需要它们的 XPath(据我所知)。问题是 XPath 的一部分每次都会更改,我不知道如何找到它们,因为它们实际上没有任何属性,例如 ID 之类的东西。

这是按钮的 HTML:

<button class="Button__StyledButton-a1qza5-0 lcqSKB" style="visibility: visible; background-color: rgb(12, 44, 91);">Lees meer om voorkeuren te accepteren</button>

这是我现在使用的命令:

driver.find_element_by_xpath('/html/body/div[14]/div[1]/div[3]/button').click()

这是 XPath:

/html/body/div[VARIABLE]/div[1]/div[3]/button

VARIABLE 每次都改变,所以我改变了 14。

2 个答案:

答案 0 :(得分:1)

这个 XPath,

//button[.='Lees meer om voorkeuren te accepteren']

将选择所有字符串值为 'Lees meer om voorkeuren te accepteren' 的按钮,与 DOM 层次结构中的布局或位置无关。

您可以通过比较空白归一化的字符串值使其更加健壮:

//button[normalize-space()='Lees meer om voorkeuren te accepteren']

这将在删除前导和尾随空格并将多个连续的内部空格折叠为单个空格后针对字符串值进行测试。

答案 1 :(得分:0)

如果您像现在一样使用完整的 xPath,您将一直遇到类似的问题。更好的方法是找出另一种/更短的方法来访问该元素。

在没有 URL 的情况下很难进行测试,但请尝试以下方法之一:

driver.find_element_by_css_selector("Button__StyledButton-a1qza5-0.lcqSKB")
driver.find_element_by_css_selector("Button__StyledButton-a1qza5-0")