【问题标题】:Finding the xpath of a button, using it in python and selenium查找按钮的 xpath,在 python 和 selenium 中使用它
【发布时间】:2017-01-17 15:40:40
【问题描述】:

我不确定你们中是否有人熟悉 Reddit,但是我想为一些战锤知识问题创建一个小型 subreddit,人们可以在其中发布问题然后回答它们。为了突出显示已回答的问题,我希望版主帐户在它们“已解决”后自动对其进行投票,我正在尝试使用 Selenium 进行投票,但是我在找到投票按钮时遇到了一些麻烦。

目前,我可以使用我的版主帐户登录,但是我无法按下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 helper工具来获取上面的XPath,但还是没有运气

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

【问题讨论】:

  • 请提供您的页面 html sn-p 以便我们可以帮助您使用 xpath。

标签: python selenium xpath


【解决方案1】:

考虑到 cmets 中提供的链接,您可以尝试使用简化的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")

【讨论】:

  • 感谢您的帮助,但是,当我尝试关闭它时,我收到以下错误:消息:无法找到元素:{“method”:“xpath”,“selector”:“/ /div[@id='thing_t3_5oiv2p']//div[@aria-label='upvote']"}
  • 我的错误,我显然将语言设置为本地,这就是它不起作用的原因。非常感谢您的帮助,我真的很感激!
【解决方案2】:

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

"//div[@id='siteTable']..."

【讨论】:

  • 感谢您的帮助!它似乎能够找到一些东西,因为它没有返回错误,但它似乎并没有真正最终单击按钮本身。
猜你喜欢
  • 2021-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-10
  • 1970-01-01
相关资源
最近更新 更多