使用selenium,如何在reddit上单击delete和yes?

时间:2017-12-28 20:34:45

标签: python selenium

我只是想通过使用python来玩网上游戏来学习python。我遇到的一件事是,在某些网站上,他们可能有一个隐藏的按钮。

例如,在Reddit上,如果您转到自己的帐户页面,并希望删除帐户页面上的第一个/热门评论,则可以轻松找到删除。唯一的问题是按下隐藏按钮“是”'。

问题在于某些帖子可以更改某些设置,例如禁用收件箱回复,删除等,并且并非所有帖子都具有这些相同的功能/按钮。

它们都具有相同的' a.yes'的CSS选择器,因此,即使您使用driver.find_elements获得所有元素,也无法始终获得该按钮,因为其他按钮,如删除和禁用收件箱回复等。由于一个页面可能是elem[0] = delete.yes, elem[1] = disable inbox.yes而另一个页面可能是elem[0]~elem[4] = delete.yes

标签的不同之处在于:
删除按钮

<a href="javascript:void(0)" class="yes" onclick="change_state(this, &quot;del&quot;, hide_thing, undefined, null)">yes</a>

禁用收件箱回复

<a href="javascript:void(0)" class="yes" onclick="change_state(this, &quot;sendreplies&quot;, null, undefined, null)">yes</a>

目前这就是我所拥有的,但由于所提到的内容,第3行不会起作用。

elem = driver.find_element_by_link_text('delete')
elem.click()
#elem = driver.find_elements_by_css_selector('a.yes') 
#elem[i].click()   

有谁知道如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

使用XPath转到父级,然后转到下一个兄弟:

confirm = driver.find_element_by_xpath('(//a[contains(text(), "delete")])[1]/../following-sibling::*')

要打破它:

  • (//a[contains(text(), "delete")])[1] - 找到第一个<a>标记,其中包含“删除”。将1改为2将找到第二个,第三个改为3,依此类推。
  • /.. - 转到父级,这是<span>代码,但无关紧要
  • /following-sibling::* - 转到下一个兄弟(此处的标签名称不相关)

然后:

confirm.find_element_by_link_text('yes').click() # To click yes
# confirm.find_element_by_link_text('no').click() to click no instead