咱們用自動化新建任務以後,要想接着對這個新建任務操做,那就須要用參數關聯了,新建任務以後會有一個任務的Jenkins-Crumb,獲取到這個Jenkins-Crumb,就能夠經過傳這個任務Jenkins-Crumb繼續操做這個新建的任務。python
大體流程步驟:登陸—>新建任務—>web界面操做刪除—>抓取刪除操做請求—>提取參數—>傳參—>代碼實現。web
一、咱們前面講過登陸後新建任務後,那能夠繼續接着操做:刪除剛纔新建的任務正則表達式
二、用fiddler抓包,抓到刪除新建任務的請求,從抓包結果能夠看出,傳的data參數是Jenkins-Crumbjson
3.這個Jenkins-Crumb哪裏來的呢?能夠看上個請求的body瀏覽器
四、也就是說在新建任務的時候,系統隨機生成一個Jenkins-Crumb參數的值,body裏面帶有Jenkins-Crumb這個參數。那接下來咱們提取出來就能夠了 bash
一、咱們須要的參數Jenkins-Crumb是在新建任務是body裏Jenkins-Crumb的值,這時候從body裏提出對應的參數值就好了(注意:每次保存須要修改內容,不能重複)微信
一、刪除新建任務的data參數傳上面取到的參數:{"Jenkins-Crumb": Jenkins_Crumb}session
二、data數據類型post裏面填data就行post
三、接着前面的新建任務操做,就能夠刪除成功了ui
注意:若是想看清楚,能夠在刪除新建任務出打斷點,看到新建的任務後,再次執行下邊的代碼 看看是否是能夠刪掉新建任務
四、302重定向
五、content內容複製到記事本,修改後綴之後,瀏覽器查看有「歡迎來到Jenkins」
1 # coding:utf-8
2 import requests
3 # 先打開登陸首頁,獲取部分session
4 url = "http://localhost:8080/jenkins/j_acegi_security_check"
5 headers = {
6 "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0"
7 } # get方法其它加個ser-Agent就能夠了
8 d = {"j_username": "admin",
9 "j_password": "111111",
10 "from": "",
11 "Submit": u"登陸",
12 "remember_me": "on"
13 }
14
15 s = requests.session()
16 r = s.post(url, headers=headers, data=d)
17 #print (r.content.decode('utf-8'))
18 # 正則表達式提取帳號和登陸按鈕
19 import re
20 t = re.findall(r'<b>(.+?)</b>', r.content.decode('utf-8')) # 用python3的這裏r.content須要解碼
21 print (t[0])
22 print (t[1])
23 #新建任務
24 url1 = "http://localhost:8080/jenkins/createItem"
25 body = {"name":"6666",
26 "mode": "hudson.model.FreeStyleProject",
27 "Jenkins-Crumb":"51a97fc7fbf3792823230d9bdd7ec906",
28 "json":{"name":"6666",
29 "mode": "hudson.model.FreeStyleProject",
30 "Jenkins-Crumb":"51a97fc7fbf3792823230d9bdd7ec906"
31
32 }
33 }
34 print(type (body))
35 import urllib
36 import sys
37 #獲取name的值
38 name = body['name']
39 print('name:'+name)
40 #獲取body的值
41 Jenkins_Crumb = body['Jenkins-Crumb']
42 print('body的值是:',body['Jenkins-Crumb'])
43 r2 = s.post(url1, data=body, verify=False)
44 #print (r2.content.decode('utf-8'))
45 #刪除新建任務
46 url2 = "http://localhost:8080/jenkins/job/"+name+"/doDelete"
47 body1 = {
48 "Jenkins-Crumb": Jenkins_Crumb
49 }
50
51 r3 = s.post(url2, data=body1, verify=False)
52 print (r3.content.decode('utf-8'))
53 #刪除成功重定向到主界面(因爲抓包沒有看到response的結果,只知道重定向主界面)
54 print(r3.url)複製代碼
一、細心地、認真的小夥伴必定會發現我代碼請求的name的值是6666,或者英文,而不是「北京-宏哥」的中文,緣由是中文出現的url中有時候會報錯。解決辦法:
1 from urllib.parse import quote
2 import urllib.request
3 name = quote(name)
4 url2 = "http://localhost:8080/jenkins/job/"+name+"/doDelete"複製代碼
二、給小夥伴們演示一下,打斷點
(1)在刪除新建任務出打上斷點,雙擊前邊便可出現一個紅色的大圓點
(2)查看jenkins主界面,沒有新建任務
(3)點擊右上方的昆蟲圖標
(4)進入debug模式,代碼運行到斷點處中止運行
(5)刷新主界面,再次查看jenkins主界面,有新建任務-北京-宏哥
(6)點擊右邊的綠色圖標一次性執行完後邊的代碼,或者是上邊拐彎藍色圖標,一步一步執行完後邊的代碼
(7)刷新主界面,再次查看jenkins主界面,你會看到:新建任務-北京-宏哥 神奇的消失了,他就這樣被你神不知鬼不覺的幹掉了