查找按钮的xpath,在python和selenium中使用它

时间:2017-01-17 15:40:40

标签: python selenium xpath

我不确定你是否熟悉Reddit,但是我想为一些战锤传说问题开始一个小的subreddit,在那里人们可以发布问题然后回答它们。要突出显示已回答的问题,我希望主持人帐户在“解决”时自动提升他们,我正在尝试使用Selenium,但是我遇到了一些找到upvote按钮的麻烦。

目前,我可以使用我的主持人帐户登录,但是我无法按下upvote按钮,我尝试了以下代码无效:

driver.get("https://www.reddit.com/r/ChosenSub/ChosenThread")

time.sleep(3)

driver.find_element_by_xpath("div[@id='siteTable']/div[@id='thing_t3_XXXXXX']/div[@class='midcol unvoted']/div[@class='arrow up login-required access-required']").click

XXXXX是相关线程的id,但是这绝对没有结果。我对Python非常熟悉,但在xPath中,我使用Chrome中的XPath帮助工具获取上面的XPath,但仍然没有运气

如果有人有任何潜在的想法,请告诉我,非常感谢任何和所有的帮助。

2 个答案:

答案 0 :(得分:1)

您可能需要在'//'前面添加xpath,以便在文档中的任何位置找到div,否则它必须位于{{的根} 1}}(很可能不是)。所以html将是:

xPath

答案 1 :(得分:1)

考虑在评论链接中提供,您可以尝试使用简化的XPath,如下所示:

driver.find_element_by_xpath("//div[@id='thing_t3_XXXXXX']//div[@aria-label='upvote']").click()

如果您需要更常用的方法来通过id(如果预定义id值)来提问题:

def upvote_question(question_id):
    driver.find_element_by_xpath("//div[@id='%s']//div[@aria-label='upvote']" % question_id).click()

然后你可以使用问题id作为参数:

upvote_question("thing_t1_dcjl4vu")