2012-07-23 205 views
2

我想通过编程方式(在python中)修改wiki页面(Confluence by Atlassian - JIRA编辑器)。我试过到目前为止是模拟用户行为:以编程方式修改wiki页面(Confluence)

  1. 点击编辑按钮
  2. 一个textarea输入
  3. 提交与保存按钮的变化而变化的内容

第1部分是因为我确定有网页对应的页面编辑,第2部分(检索页面和修改)也可以,但我不知道如何实现第3步...我使用urllib2

感谢您的帮助!

编辑:XML-RPC的确是解决方案,this example正是我想要的!

+0

你可以请求解决方案作为答案?我无法在链接中查看该页面。 – MrPickles 2015-07-10 13:00:00

回答

5

这似乎是绝对错误的方式去做。

首先,Confluence有一个插件体系结构,它应该允许您以编程方式从应用程序本身登录manage content,而不需要任何类型的HTTP请求。其次,即使你不想,或者不能,由于某种原因使用插件API,下一个显而易见的选择是使用SOAP/XML-RPC API

除非您尝试进行某种包括测试GUI(例如自动跨浏览器测试)的端到端测试,否则没有理由实际混淆buttontextarea

+1

太棒了!我不会使用第一个解决方案,因为我使用Python,但第二个解决方案非常棒(刚刚找到了一个完全符合我需要的样本)! – Emmanuel 2012-07-23 13:11:55

9
# write to a confluence page 
import xmlrpclib 

CONFLUENCE_URL = "https://intranet.example.com/confluence/rpc/xmlrpc" 
CONFLUENCE_LOGIN = "a confluence username here" 
CONFLUENCE_PASSWORD = "confluence pwd for username" 

# get this from the page url while editing 
# e.g. ../editpage.action?pageId=132350005 <-- here 
PAGE_ID = "132350005" 
client = xmlrpclib.Server(CONFLUENCE_URL, verbose = 0) 
auth_token = client.confluence2.login(CONFLUENCE_LOGIN, CONFLUENCE_PASSWORD) 
page = client.confluence2.getPage(auth_token, PAGE_ID) 

# and write the new contents 
page['content'] = "!!!your content here!!!" 

result = client.confluence2.storePage(auth_token, page) 
client.confluence2.logout(auth_token) 

请注意,当你这样做时,汇合修改你的html代码。例如,它会去除元素上的脚本,样式和标题属性。为了让这些东西回到你身上,需要使用他们的宏代码。

这样做最简单的方法是在合流中编辑页面,使其看起来像你想要的,然后抓住页面,并做一个打印页面['内容'],看看atlassian人已决定什么神奇的新东西做到标准的HTML。

+1

我相信你需要在注销之前添加'client.confluence2.storePage(auth_token,page)'才能工作,不是吗? – Jerry 2014-01-27 14:41:07

+2

该代码是从工作脚本修改的。我怀疑指数分配正在完成这项工作。我明天上班的时候会仔细检查一下。 – 2014-01-28 08:22:18

+1

@Jerry你说得很对。不知怎的,我一定错过了那条路。我已经相应地修复了脚本。感谢您的反馈。 – 2014-01-28 23:44:55

相关问题