我正在try 使用XPath关闭弹出窗口,但失败了:

网址:https://www.zhihu.com/question/42867599

driver.find_element_by_xpath("/html/body/div[5]/div/div/div/div[2]/button/svg").click()

我从Firefox那里得到了XPath,所以我不知道这里出了什么问题.页面的图像即被添加.

enter image description here

推荐答案

Use this Xpath:

'//button[@class="Button Modal-closeButton Button--plain"]'

点击svg元素是没有意义的,因为事件监听器在button上.

浏览器自动生成的XPath很糟糕,它们不是可靠的查询.

Take a look at my own project to craft more specific XPath (or even CSS selectors) more easily and with better querys:
https://github.com/sputnick-dev/retrieveCssOrXpathSelectorFromTextOrNode

您甚至可以像这样使XPath更可靠(部分匹配):

'//button[contains(@class, "closeButton")]'

您还可以使用属性中的文本:

'//button[@aria-label="关闭"]'

Select 在你的情况下看起来更可靠的那个.如果页面内部发生变化,您也可以保留对其他版本的 comments .

tested in Chromium:

$x('//button[@class="Button Modal-closeButton Button--plain"]')[0].click()

Note:

find_element_by_xpath(selector)方法在Selenium 4中已弃用,您应该改用:

selector = '//button[contains(@class, "closeButton")]'
from selenium.webdriver.common.by import By
find_element(By.XPATH, selector)

请参阅:find_element_by_* commands are deprecated in Selenium

Python-3.x相关问答推荐

Django 5.0.2和django_rest_framework

将Trio与基于线程的事件侦听器混合使用

如何转换Pandas中的数据,以使我 Select 的列名变为行值并增加行?

如何在 python 中将带有时区信息的时间戳转换为 utc 时间

汉明距离:涉及按位运算的逻辑步骤不清楚

ImportError:抓取数据后找不到 html5lib

如何在 histplot 中标记核密度估计

提高时间复杂度的一些建议

Python rolling_corr 取消后,应该用什么方法来处理

从 h264 帧解析数据包时 PyAV 不一致

是否将dict转换为一个数据帧,每个值都有重复的键?

为什么不切换到 Python 3.x?

使用 pytest.fixture 返回模拟对象的正确方法

使用 Sublime Text 3 在 Python 3 中打印 UTF-8

所有 Python dunder 方法的列表 - 您需要实现哪些方法才能正确代理对象?

Python3 的超级和理解-> TypeError?

Python 3.5:async with导致 SyntaxError.为什么?

try 在 Windows 10 高 DPI 显示器上解决模糊的 tkinter 文本 + zoom ,但担心我的方法不是 Pythonic 或不安全

python判断一个方法是否被调用而不模拟它

在 linux mint 上安装 python3-venv 模块