【问题标题】:How can I select a specific element on a page when there is so many of that element? Selenium webdriver python;当页面上有这么多元素时,如何选择该页面上的特定元素? Selenium webdriver python;
【发布时间】:2021-05-31 11:20:01
【问题描述】:

基本上我想要做的是只选择红色圈出的“回复”框,但整个页面中有很多这样的框。我的目标是能够选择每个页面上的第一个“回复”框。如何为每个帖子只选择第一个回复框(此链接仅作为示例)?

目前这似乎不起作用:

reply = driver.find_element_by_xpath("//*[@id='content']/div/div[2]/div/div/div/div[1]/article/div/aside/ul/li[1]/div/div[2]/div/ul/li[7]/button/span/img")
reply.click()

非常感谢。

【问题讨论】:

  • 除了现有的答案,也许可以查看一些帮助您选择元素的浏览器扩展,例如chrome.google.com/webstore/detail/selectorgadget/…
  • 虽然我相信大多数人都是出于好意,但我不禁注意到您正试图在论坛中找到“回复”按钮。请注意,SO 不会容忍将社区知识用于邪恶的人,例如垃圾邮件。
  • 当我的目标是在社区论坛上帮助客户时,我不喜欢被指控为垃圾邮件。将来,在向人们提出指控之前,请尝试进行自己的研究。
  • 我并没有试图指责你任何事情,如果我的评论让你有这种感觉,我很抱歉。

标签: python selenium selenium-webdriver webdriver selenium-chromedriver


【解决方案1】:

第一种方式:
定位任何重播按钮的 XPath 是

//button[@title="Reply"]

所以定位第一个重播按钮的 XPath 是

(//button[@title="Reply"])[1]

所以你可以简单

driver.find_element_by_xpath('(//button[@title="Reply"])[1]').click()

第二种方式:
使用上面的 XPath,您可以检索所有重播按钮的列表,然后获取列表中的第一个元素并单击它,如下所示:

replay_buttons = driver.find_elements_by_xpath('//button[@title="Reply"]')
replay_buttons[0].click()

您也可以在这里使用 css_selector 代替 XPath:

replay_buttons = driver.find_elements_by_css_selector('button[title="Reply"]')
replay_buttons[0].click()

【讨论】:

  • 所以到目前为止它已经在选择第一个回复按钮方面起作用了,你认为有没有办法在按下回复后发送“@username”键,所以这个人知道我正在回复给他们?对于上面的链接:community.giffgaff.com/d/33277735-over-charging,我想在这个例子中回复用户“1prophet1”,他们是第一个原始发帖人。有没有办法回复第一张海报的名字,而不必手动输入他们的真实姓名?
  • 您是否询问打开的新窗口以登录系统,其中包含用户名和密码字段以及登录按钮?
  • 我明白了。我认为这是另一个单独的问题,而 stackoverflow 要求用户每个问题只问一个问题。所以请在这里接受答案,我会尝试单独回答这个问题
【解决方案2】:

查看页面我看到这个按钮的类名是:<button class="Button Button--link">

所以你可以使用 driver.find_elements_by_class_name('Button Button--link') , 它返回所有按钮的列表。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-03
    • 1970-01-01
    • 2016-09-25
    • 2013-12-13
    • 1970-01-01
    相关资源
    最近更新 更多