|
24 | 24 |
|
25 | 25 | use rand::Rng; |
26 | 26 | use regex::Regex; |
27 | | -use scraper::{Html, Selector}; |
28 | 27 |
|
29 | 28 | use goose::GooseState; |
30 | 29 | use goose::goose::{GooseTaskSet, GooseClient, GooseTask}; |
@@ -120,26 +119,23 @@ fn drupal_loadtest_login(client: &mut GooseClient) { |
120 | 119 | Ok(r) => { |
121 | 120 | match r.text() { |
122 | 121 | Ok(html) => { |
123 | | - // Extract the form_build_id from the user login form. |
124 | | - let user_page = Html::parse_document(&html); |
125 | | - let selector = Selector::parse(r#"input[name='form_build_id']"#).expect("failed to parse selector"); |
126 | | - let input = match user_page.select(&selector).next() { |
127 | | - Some(i) => i, |
| 122 | + let re = Regex::new( r#"name="form_build_id" value=['"](.*?)['"]"#).unwrap(); |
| 123 | + let form_build_id = match re.captures(&html) { |
| 124 | + Some(f) => f, |
128 | 125 | None => { |
129 | | - eprintln!("no form_build_id found on /user"); |
| 126 | + eprintln!("no form_build_id on page: /user page"); |
130 | 127 | client.set_failure(); |
131 | 128 | return; |
132 | 129 | } |
133 | 130 | }; |
134 | | - let form_build_id = input.value().attr("value").expect("failed to get form_build_id value"); |
135 | 131 |
|
136 | 132 | // Log the user in. |
137 | 133 | let uid = rand::thread_rng().gen_range(3, 5_002); |
138 | 134 | let username = format!("user{}", uid); |
139 | 135 | let params = [ |
140 | 136 | ("name", username.as_str()), |
141 | 137 | ("pass", "12345"), |
142 | | - ("form_build_id", form_build_id), |
| 138 | + ("form_build_id", &form_build_id[1]), |
143 | 139 | ("form_id", "user_login"), |
144 | 140 | ("op", "Log+in"), |
145 | 141 | ]; |
@@ -167,50 +163,45 @@ fn drupal_loadtest_post_comment(client: &mut GooseClient) { |
167 | 163 | match r.text() { |
168 | 164 | Ok(html) => { |
169 | 165 | // Extract the form_build_id from the user login form. |
170 | | - let comment_page = Html::parse_document(&html); |
171 | | - |
172 | | - let selector = Selector::parse(r#"input[name='form_build_id']"#).expect("failed to parse form_build_id selector"); |
173 | | - let input = match comment_page.select(&selector).next() { |
174 | | - Some(i) => i, |
| 166 | + let re = Regex::new( r#"name="form_build_id" value=['"](.*?)['"]"#).unwrap(); |
| 167 | + let form_build_id = match re.captures(&html) { |
| 168 | + Some(f) => f, |
175 | 169 | None => { |
176 | 170 | eprintln!("no form_build_id found on node/{}", &nid); |
177 | 171 | client.set_failure(); |
178 | 172 | return; |
179 | 173 | } |
180 | 174 | }; |
181 | | - let form_build_id = input.value().attr("value").expect("failed to get form_build_id value"); |
182 | 175 |
|
183 | | - let selector = Selector::parse(r#"input[name='form_token']"#).expect("failed to parse form_token selector"); |
184 | | - let input = match comment_page.select(&selector).next() { |
185 | | - Some(i) => i, |
| 176 | + let re = Regex::new( r#"name="form_token" value=['"](.*?)['"]"#).unwrap(); |
| 177 | + let form_token = match re.captures(&html) { |
| 178 | + Some(f) => f, |
186 | 179 | None => { |
187 | 180 | eprintln!("no form_token found on node/{}", &nid); |
188 | 181 | client.set_failure(); |
189 | 182 | return; |
190 | 183 | } |
191 | 184 | }; |
192 | | - let form_token = input.value().attr("value").expect("failed to get form_token value"); |
193 | 185 |
|
194 | | - let selector = Selector::parse(r#"input[name='form_id']"#).expect("failed to parse form_token selector"); |
195 | | - let input = match comment_page.select(&selector).next() { |
196 | | - Some(i) => i, |
| 186 | + let re = Regex::new( r#"name="form_id" value=['"](.*?)['"]"#).unwrap(); |
| 187 | + let form_id = match re.captures(&html) { |
| 188 | + Some(f) => f, |
197 | 189 | None => { |
198 | 190 | eprintln!("no form_id found on node/{}", &nid); |
199 | 191 | client.set_failure(); |
200 | 192 | return; |
201 | 193 | } |
202 | 194 | }; |
203 | | - let form_id = input.value().attr("value").expect("failed to get form_id value"); |
204 | 195 | //println!("form_id: {}, form_build_id: {}, form_token: {}", &form_id, &form_build_id, &form_token); |
205 | 196 |
|
206 | 197 | let comment_body = "this is a test comment body"; |
207 | 198 | let params = [ |
208 | 199 | ("subject", "this is a test comment subject"), |
209 | 200 | ("comment_body[und][0][value]", &comment_body), |
210 | 201 | ("comment_body[und][0][format]", "filtered_html"), |
211 | | - ("form_build_id", form_build_id), |
212 | | - ("form_token", form_token), |
213 | | - ("form_id", form_id), |
| 202 | + ("form_build_id", &form_build_id[1]), |
| 203 | + ("form_token", &form_token[1]), |
| 204 | + ("form_id", &form_id[1]), |
214 | 205 | ("op", "Save"), |
215 | 206 | ]; |
216 | 207 | let request_builder = client.goose_post(format!("/comment/reply/{}", &nid).as_str()); |
|
0 commit comments