KK课表抓取教务系统

字符串数据解析 太难看 = =

1login_widget::login_widget(QWidget *parent) ://QWidget(parent), 2ui(new Ui::login_widget) 3{ 4 5 ui->setupUi(this); 6= (MainWindow*)parent; 7 8 //loading = new loading_widget(this); 9 10 11#ifndef Q_OS_WIN32 12 FixScreen(); 13#endif 14 15 16 timer_timeout = new QTimer(this); 17 18 connect(timer_timeout, SIGNAL(timeout()), this, SLOT(slot_timer())); 19 20 manager = new QNetworkAccessManager(this); 21 22 23 connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(doManagerFinished(QNetworkReply*))); 24 25 connect(ui->pushButton_2, SIGNAL(clicked()), this, SLOT(slot_verfy())); 26 connect(ui->pushButton_3, SIGNAL(clicked()), this, SLOT(slot_close())); 27 connect(ui->pushButton_4, SIGNAL(clicked()), this, SLOT(slot_shuom())); 28 29 QMovie *pm = new QMovie(":/loading.gif"); 30 31 ui->label_7->setMovie(pm); 32 33 pm->setScaledSize(QSize(100 * PublicFunc::getFactory(), 30 * PublicFunc::getFactory())); 34 35 pm->start(); //才会开始动 36 37 QPixmap pix; 38 pix.load(":/1.png"); 39 40 ui->label_6->setPixmap(pix); 41 42 setHide(); 43 44 45} 46 47 48 49void login_widget::slot_timer() 50{ 51 timer_timeout->stop(); 52 setHide(); 53 54 QMessageBox::warning(this, char_net_error, char_net_error_center); 55 56 slot_close(); 57 58 59} 60 61 62 63 64void login_widget::setShow() 65{ 66 ui->label_6->setVisible(true); 67 ui->label_7->setVisible(true); 68 69} 70 71 72void login_widget::setStart(int time)/*超时15 S*/ 73{ 74 timer_timeout->start(time); 75 76} 77 78 79void   login_widget::setHide() 80{ 81 82 ui->label_6->setVisible(false); 83 ui->label_7->setVisible(false); 84 85} 86 87 88 89 90 91void login_widget::setLoginVisiable(bool is) 92{ 93 ui->pushButton->setVisible(is); 94 95 ui->pushButton_2->setVisible(is); 96 97 ui->lineEdit->setVisible(is); 98 99 ui->lineEdit_2->setVisible(is); 100 101 ui->lineEdit_3->setVisible(is); 102 103 ui->label->setVisible(is); 104 105 ui->label_2->setVisible(is); 106 107 ui->label_3->setVisible(is); 108 109 ui->label_4->setVisible(is); 110 111} 112 113 114 115 116 117void login_widget::doManagerFinished(QNetworkReply *reply) 118{ 119 timer_timeout->stop(); 120 121 QByteArray binary = reply->readAll(); 122 if (binary.size() <= 0) 123 { 124 setHide(); 125 QMessageBox::warning(this, "\347\275\221\347\273\234\351\224\231\350\257\257", "\350\257\267\346\243\200\346\237\245\347\275\221\347\273\234\350\277\236\346\216\245"); 126 127 //reply->deleteLater(); 128 delete reply; 129 130 return; 131 132 } 133 134 135 136 QString result = QTextCodec::codecForName("gb2312")->toUnicode(binary); 137 if (reply->url() == homepageUrl) 138 { 139 /*登陆*/ 140 141 if (reply->operation() == QNetworkAccessManager::GetOperation) 142 { 143 QRegExp reg("name=\"__VIEWSTATE\" value=\"([^\"]+)\""); 144 if (reg.indexIn(result) != -1) 145 { 146 viewstate = reg.cap(1); 147 } 148 149 if (reply->rawHeader("Set-Cookie").length()) 150 { 151 jsessionid = reply->rawHeader("Set-Cookie"); 152 jsessionid = jsessionid.left(jsessionid.indexOf(';')); 153 } 154 else 155 { 156 157 } 158 159 slot_verfy(); 160 } 161 else 162 { 163 164 setStart(); 165 QNetworkRequest request; 166 request.setRawHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 9.0; Windows NT 6.3; WOW64; Trident/8.0)"); 167 request.setRawHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"); 168 request.setRawHeader("Accept-Encoding", "gzip, deflate"); 169 request.setRawHeader("Accept-Language", "zh-CN,zh;q=0.8"); 170 request.setRawHeader("Cache-Control", "max-age=0"); 171 request.setRawHeader("Cookie", jsessionid.toLatin1()); 172 request.setRawHeader("Connection", "Keep-Alive"); 173 174 //     qDebug() << mainpageUrl; 175 request.setUrl(QUrl(mainpageUrl)); 176 manager->get(request); 177 178 179 setShow(); 180 } 181 } 182 183 184 else if (reply->url() == captchaUrl) 185 { 186 /*验证码*/ 187 QPixmap pixmap; 188 189 if (pixmap.loadFromData(binary)) 190 { 191 192 setHide(); 193 194 195 ui->label->setVisible(true); 196 ui->pushButton->setVisible(true); 197 198 199#ifndef Q_OS_WIN32 200 ui->label->setPixmap(pixmap.scaled(72 * 2.2 * PublicFunc::getFactory(), 27 * 2.2*PublicFunc::getFactory(), Qt::KeepAspectRatio)); 201#else 202 ui->label->setPixmap(pixmap); 203#endif 204 205 } 206 } 207 208 else if (reply->url() == url_kebiao) 209 { 210 /*课表*/ 211 212 dataTable.clear(); 213 214 //ui->textEdit->append(QString::fromLocal8Bit(binary.data())); 215 216 QString data = QString::fromLocal8Bit(binary.data()); 217 218 /**/ 219 int x = data.indexOf("trbg1") + 10; 220 int y = data.indexOf("datelist"); 221 data = data.mid(x, y - x); 222 223= data.indexOf("trbg1") + 10; 224 225 226 info = (data.mid(x, data.indexOf("labTip") - x)); 227 228 229= data.indexOf("Table1") - 11; 230= data.indexOf("</table>"); 231 232 data = data.mid(x, data.size() - x); 233 data = data.mid(0, data.indexOf("</table>")); 234 235 236= data.indexOf("</tr>") + 5; 237 data = data.mid(x, -1); 238 239= data.indexOf("</tr>") + 5; 240 data = data.mid(x, -1); 241 242 QString tm; 243 244= info.indexOf("&nbsp"); 245 info = info.mid(0, x); 246 247= info.indexOf(">"); 248 info = info.mid(+ 1, -1); 249 250 info.remove("|"); 251 252 info.remove("</span>"); 253 254 info.remove(info.indexOf("<"), info.indexOf(">") - info.indexOf("<") + 1); 255 info.remove(info.indexOf("<"), info.indexOf(">") - info.indexOf("<") + 1); 256 info.remove(info.indexOf("<"), info.indexOf(">") - info.indexOf("<") + 1); 257 info.remove(info.indexOf("<"), info.indexOf(">") - info.indexOf("<") + 1); 258 info.remove(info.indexOf("<"), info.indexOf(">") - info.indexOf("<") + 1); 259 260 info.remove("\t"); 261 262 setHide(); 263 264 265 info.insert(0, "\n"); 266 267 QMessageBox::warning(this, "\350\257\276\350\241\250\344\277\241\346\201\257", info);/*课表信息*/ 268 269 QSettings set("kebiao", "1"); 270 set.setValue("info", info); 271 272 /*分割完成 接下来 提取每一行数据 一共14行*/ 273 274 275 for (int i = 0; i < 14; i++) 276 { 277= data.indexOf("<tr>"); 278= data.indexOf("</tr>") + 5; 279 class_arry[i] = data.mid(x, y - x); 280 data = data.mid(y, -1); 281 282 // data.remove(class_arry[i]); 283 284 } 285 286 /*提取每一行完毕 开始分割列*/ 287 QString day[15]; 288 289 QString tmp; 290 291 for (int xx = 0; xx < 14; xx += 2) 292 { 293 294 class_arry[xx].remove("</tr>"); 295 class_arry[xx].remove("<tr>"); 296 297 298 for (int i = 0; i < 7; i++) 299 { 300= class_arry[xx].lastIndexOf("<td"); 301= class_arry[xx].lastIndexOf("</td>") + 5; 302 day[i] = class_arry[xx].mid(x, y - x); 303 304 class_arry[xx] = class_arry[xx].mid(0, x); 305 day[i].remove(day[i].mid(0, day[i].indexOf(">") + 1)); 306 307 day[i].remove("&nbsp;</td>"); 308 309 day[i].remove("</td>"); 310 day[i].replace("<br>", "."); 311 312 313 /*取出每一节课完成 开始取出每一节课信息*/ 314 315 for (int iii = 0; iii < 3; iii++) 316 { 317 318 /*取出名字*/ 319= day[i].indexOf("."); 320 tmp = day[i].mid(0, y); 321 dataTable.data[6 - i][xx][iii].class_name = tmp; 322 // day[i].remove(tmp + "."); 323 324 day[i] = day[i].mid(+ 1, -1); 325 326 /*课程性质*/ 327= day[i].indexOf("."); 328 tmp = day[i].mid(0, y); 329 dataTable.data[6 - i][xx][iii].class_pro = tmp; 330 tmp = tmp + "."; 331 // day[i].remove(tmp); 332 333 day[i] = day[i].mid(+ 1, -1); 334 335 336 /*时间*/ 337= day[i].indexOf("."); 338 tmp = day[i].mid(0, y); 339 dataTable.data[6 - i][xx][iii].class_time = tmp; 340 tmp = tmp + "."; 341 //day[i].remove(tmp); 342 343 day[i] = day[i].mid(+ 1, -1); 344 345 346 /*老师*/ 347= day[i].indexOf("."); 348 tmp = day[i].mid(0, y); 349 dataTable.data[6 - i][xx][iii].class_techer = tmp; 350 tmp = tmp + "."; 351 //day[i].remove(tmp); 352 day[i] = day[i].mid(+ 1, -1); 353 354 355 356 /*地点*/ 357= day[i].indexOf("."); 358 if (<= 0) 359 { 360 dataTable.data[6 - i][xx][iii].class_posi = day[i]; 361 day[i] = ""; 362 } 363 else 364 { 365 366 tmp = day[i].mid(0, y); 367 dataTable.data[6 - i][xx][iii].class_posi = tmp; 368 tmp = tmp + ".."; 369 //day[i].remove(tmp); 370 371 day[i] = day[i].mid(+ 2, -1); 372 373 374 } 375 if (day[i].size() < 1)break; 376 377 } 378 379 /* QTableWidgetItem* z = new QTableWidgetItem(day[i]); 380 z->setTextAlignment(Qt::AlignCenter); 381 382 383 p->ui->tableWidget->setItem(xx, 6 - i, z); 384 p->ui->tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers); //设置不可编辑 385 386 p->ui->tableWidget->horizontalHeader()->resizeSection(6 - i, 80 * PublicFunc::getFactory()); //设置表头第一列的宽度为150 387 388 p->ui->tableWidget->setRowHeight(xx, PublicFunc::getFactory() * 100); 389 p->ui->tableWidget->setRowHeight(xx + 1, 0); 390 391 QFont font; 392 font.setPointSize(12); 393 394 395 font.setFamily("simsun"); 396 397 z->setFont(font);*/ 398 399 } 400 401 402 } 403 p->syncTable(setCenter::current_week); 404 405 406 QMessageBox::information(this, "\346\217\220\347\244\272", "\345\257\274\345\205\245\350\257\276\350\241\250\346\210\220\345\212\237");/*错误*/ 407 408 /*提示 导入课表成功*/ 409 410 411 ui->pushButton->setVisible(true); 412 413 slot_close(); 414 415 } 416 417 418 else if (reply->url() == url_chenji) 419 { 420 421 if (reply->operation() == QNetworkAccessManager::GetOperation) 422 { 423 /*get*/ 424 QRegExp reg("name=\"__VIEWSTATE\" value=\"([^\"]+)\""); 425 if (reg.indexIn(result) != -1) 426 { 427 viewstate = reg.cap(1); 428 } 429 430 if (reply->rawHeader("Set-Cookie").length()) 431 { 432 jsessionid = reply->rawHeader("Set-Cookie"); 433 jsessionid = jsessionid.left(jsessionid.indexOf(';')); 434 } 435 436 setStart(); 437 438 QNetworkRequest request; 439 request.setRawHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 9.0; Windows NT 6.3; WOW64; Trident/8.0)"); 440 request.setRawHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"); 441 request.setRawHeader("Accept-Encoding", "gzip, deflate"); 442 request.setRawHeader("Accept-Language", "zh-CN,zh;q=0.8"); 443 request.setRawHeader("Cache-Control", "max-age=0"); 444 request.setRawHeader("Cookie", jsessionid.toLatin1()); 445 request.setRawHeader("Connection", "Keep-Alive"); 446 447 request.setRawHeader("Referer", ss.toStdString().c_str()); 448 449 QUrl mainpageUrl = QUrl(ss); 450 request.setUrl(QUrl(url_chenji)); 451 452 QUrlQuery query; 453 query.addQueryItem("__EVENTTARGET", "ddlxn"); 454 query.addQueryItem("__EVENTARGUMENT", ""); 455 query.addQueryItem("__VIEWSTATE", viewstate); 456 QString xueqi; 457 char xuen[30]; 458 459 460 QDate date = QDate::currentDate(); 461 462 if (date.month() >= 6 && date.month() <= 10) 463 { 464 /*第二学期*/ 465 xueqi = "2"; 466 sprintf(xuen, "%d-%d", date.year() - 1, date.year()); 467 } 468 else  if (date.month() > 10) 469 { 470 /*第1学期*/ 471 xueqi = "1"; 472 sprintf(xuen, "%d-%d", date.year(), date.year() + 1); 473 } 474 475 else 476 { 477 /*第1学期*/ 478 xueqi = "1"; 479 sprintf(xuen, "%d-%d", date.year() - 1, date.year()); 480 481 } 482 query.addQueryItem("ddlxn", xuen); 483 query.addQueryItem("ddlxq", xueqi); 484 485 query.addQueryItem("btnCx", "+%B2%E9++%D1%AF+"); 486 487 QByteArray postData = query.toString(QUrl::FullyEncoded).replace("+", "%2B").toLatin1(); 488 489 manager->post(request, postData); 490 491 setShow(); 492 493 494 } 495 else if (reply->operation() == QNetworkAccessManager::PostOperation) 496 { 497 /*post*/ 498 499 500 ui->pushButton->setVisible(true); 501 setHide(); 502 503 do_chengji(binary); 504 505 } 506 507 } 508 else 509 { 510 511 setHide(); 512 513 /*登陆后*/ 514 QString s = binary.data(); 515 516 if (s.indexOf("main_html") <= 0) 517 { 518 /*登陆失败*/ 519 slot_verfy(); 520 QMessageBox::warning(this, "\351\224\231\350\257\257", "\345\257\206\347\240\201\346\210\226\351\252\214\350\257\201\347\240\201");/*错误*/ 521 522 /*登陆失败*/ 523 } 524 else 525 { 526 /*登陆成功 开始获取课表*/ 527 528 if (is_kebiao) 529 { 530 slot_getKebiao(); 531 } 532 else 533 slot_getChenJi(); 534 535 // setLoginVisiable(false); 536 537 } 538 } 539 540 541 //reply->deleteLater(); 542 delete reply; 543 544} 545 546 547 548void login_widget::on_pushButton_clicked() 549{ 550 551 552 /*输入规则判断*/ 553 if (ui->lineEdit_2->text().length() < 11) 554 { 555 QMessageBox::warning(this, char_tixing, "\350\257\267\346\255\243\347\241\256\350\276\223\345\205\245\345\255\246\345\217\267"); 556 557 return; 558 } 559 560 561 if (ui->lineEdit_3->text().length() == 0) 562 { 563 QMessageBox::warning(this, char_tixing, "\345\257\206\347\240\201\344\270\215\350\203\275\344\270\272\347\251\272"); 564 565 return; 566 } 567 568 if (ui->lineEdit->text().length() == 0) 569 { 570 QMessageBox::warning(this, char_tixing, "\350\257\267\350\276\223\345\205\245\351\252\214\350\257\201\347\240\201"); 571 572 return; 573 } 574 575 576 if (ui->lineEdit->text().length() < 4) 577 { 578 QMessageBox::warning(this, char_tixing, "\351\252\214\350\257\201\347\240\201\351\224\231\350\257\257"); 579 580 return; 581 } 582 583 ui->pushButton->setVisible(false); 584 585 586 /*登陆*/ 587 588 setStart(); 589 setShow(); 590 591 QNetworkRequest request; 592 request.setUrl(homepageUrl); 593 request.setRawHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 9.0; Windows NT 6.3; WOW64; Trident/8.0)"); 594 request.setRawHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"); 595 request.setRawHeader("Accept-Encoding", "gzip, deflate"); 596 request.setRawHeader("Accept-Language", "zh-CN,zh;q=0.8"); 597 request.setRawHeader("Cache-Control", "max-age=0"); 598 request.setRawHeader("Cookie", jsessionid.toLatin1()); 599 request.setRawHeader("Connection", "Keep-Alive"); 600 601 query.addQueryItem("txtUserName", ui->lineEdit_2->text()); 602 query.addQueryItem("TextBox2", ui->lineEdit_3->text()); 603 query.addQueryItem("txtSecretCode", ui->lineEdit->text()); 604 query.addQueryItem("RadioButtonList1", "%D1%A7%C9%FA"); 605 QByteArray postData = query.toString(QUrl::FullyEncoded).replace("+", "%2B").toLatin1(); 606 607 //  qDebug() << postData; 608 609 request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded"); 610 request.setHeader(QNetworkRequest::ContentLengthHeader, postData.length()); 611 manager->post(request, postData); 612 613 614} 615 616 617 618void login_widget::slot_getChenJi() 619{ 620 setShow(); 621 622 setStart(); 623 624 625 QNetworkRequest request; 626 request.setRawHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 9.0; Windows NT 6.3; WOW64; Trident/8.0)"); 627 request.setRawHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"); 628 request.setRawHeader("Accept-Encoding", "gzip, deflate"); 629 request.setRawHeader("Accept-Language", "zh-CN,zh;q=0.8"); 630 request.setRawHeader("Cache-Control", "max-age=0"); 631 request.setRawHeader("Cookie", jsessionid.toLatin1()); 632 request.setRawHeader("Connection", "Keep-Alive"); 633 634 request.setRawHeader("Referer", ss.toStdString().c_str()); 635 636 637 QUrl mainpageUrl = QUrl(ss); 638 request.setUrl(QUrl(url_chenji)); 639 manager->get(request); 640 641 642} 643 644 645 646 647 648 649void login_widget::slot_close() 650{ 651 652 manager->clearAccessCache(); 653 654 timer_timeout->stop(); 655 setHide(); 656 657 this->hide(); 658}
点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

QT中QWidget动态增加控件

环境:QT版本:5.6.21.前言QWidget动态增加控件,并且铺满控件。2.实现原理voidQWidget::setSizePolicy(QSizePolicy::Policyhorizontal,QSizePolicy::Policyvertical)T

Oracle一条SQL语句时快时慢

今天碰到一个非常奇怪的问题问题,一条SQL语句在PL/SQLdeveloper中很慢,需要9s,问题SQL:SELECT\FROMGG\_function\_locationfWHEREf.parent\_id'03000000000001'; 表GG\_function\_location有5千万的数据,parent\_id上

KK课表抓取教务系统 - HelloWorld