Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用selenium,我如何在reddit上单击delete和yes?_Python_Selenium - Fatal编程技术网

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

Python 使用selenium,我如何在reddit上单击delete和yes?,python,selenium,Python,Selenium,我只是想通过使用python在网上冲浪来学习python。我遇到的一件事是,在一些网站上,他们可能有一个隐藏的按钮 例如,在Reddit上,如果您转到您的帐户页,并希望删除帐户页上的第一条/最上面的评论,您可以轻松找到delete。唯一的问题是按下隐藏按钮“是” 问题在于,有些帖子可以更改某些设置,如禁用收件箱回复、删除等,但并非所有帖子都具有相同的功能/按钮 它们都有相同的CSS选择器“a.yes”,因此即使使用driver.find_元素获取所有元素,也无法始终获取按钮,因为还有其他按钮,如

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

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

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

它们都有相同的CSS选择器“
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, &quot;del&quot;, hide_thing, undefined, null)">yes</a>

有人知道如何避开这个问题吗

使用XPath访问父级,然后访问下一个同级:

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

  • (//a[contains(text(),“delete”)][1]
    -查找第一个带有“delete”的
    标记。将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