Python 使用selenium,我如何在reddit上单击delete和yes?
我只是想通过使用python在网上冲浪来学习python。我遇到的一件事是,在一些网站上,他们可能有一个隐藏的按钮 例如,在Reddit上,如果您转到您的帐户页,并希望删除帐户页上的第一条/最上面的评论,您可以轻松找到delete。唯一的问题是按下隐藏按钮“是” 问题在于,有些帖子可以更改某些设置,如禁用收件箱回复、删除等,但并非所有帖子都具有相同的功能/按钮 它们都有相同的CSS选择器“Python 使用selenium,我如何在reddit上单击delete和yes?,python,selenium,Python,Selenium,我只是想通过使用python在网上冲浪来学习python。我遇到的一件事是,在一些网站上,他们可能有一个隐藏的按钮 例如,在Reddit上,如果您转到您的帐户页,并希望删除帐户页上的第一条/最上面的评论,您可以轻松找到delete。唯一的问题是按下隐藏按钮“是” 问题在于,有些帖子可以更改某些设置,如禁用收件箱回复、删除等,但并非所有帖子都具有相同的功能/按钮 它们都有相同的CSS选择器“a.yes”,因此即使使用driver.find_元素获取所有元素,也无法始终获取按钮,因为还有其他按钮,如
a.yes
”,因此即使使用driver.find_元素获取所有元素,也无法始终获取按钮,因为还有其他按钮,如删除和禁用收件箱回复等。。因为一个页面可以是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, "del", hide_thing, undefined, null)">yes</a>
有人知道如何避开这个问题吗 使用XPath访问父级,然后访问下一个同级:
confirm = driver.find_element_by_xpath('(//a[contains(text(), "delete")])[1]/../following-sibling::*')
要分解它:
-查找第一个带有“delete”的(//a[contains(text(),“delete”)][1]
标记。将1更改为2将找到第二个、第三个,依此类推
-转到父级,这是一个/…
标记,但这并不重要
-转到下一个同级(同样,此处的标记名不相关)/以下同级::*
Reddit有一个API。你只是想区分“删除”和“禁用收件箱”按钮吗?你是说你不能区分这两个按钮吗?如果是这样的话,你必须使用xpath或其他方法来找到父对象,然后找到你想要的子对象。哇,这是非常有趣的工作原理。只是想知道,find_元素也可以工作吗?使变量有效地确认一组删除按钮?你到底是什么意思,下一个兄弟姐妹?谢谢是的,实际上可以这样做,只需去掉XPath开头的括号和数字。下一个同级只是指它旁边的元素。它们在DOM树中处于同一级别。因此,如果您有
hi-world
,则foo和bar元素是彼此的兄弟元素。嗯!有趣!我得进一步调查一下。非常感谢!
elem = driver.find_element_by_link_text('delete')
elem.click()
#elem = driver.find_elements_by_css_selector('a.yes')
#elem[i].click()
confirm = driver.find_element_by_xpath('(//a[contains(text(), "delete")])[1]/../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