Skip to content
This repository was archived by the owner on Mar 10, 2025. It is now read-only.

Commit ba5f39f

Browse files
author
CheukFung
committed
优化配置方式
优化配置方式,更方便适配多个学校
1 parent 24c1265 commit ba5f39f

File tree

6 files changed

+241
-209
lines changed

6 files changed

+241
-209
lines changed

README.md

Lines changed: 41 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,15 @@
22

33
正方教务系统爬虫。
44

5-
只要做很少的修改,即可用于不同的正方教务
5+
一份代码,通用全部学校的正方教务系统
66

77
#感谢
88

99
受到@lndj 的Lcrawl项目启发,项目地址:https://github.com/lndj/Lcrawl
1010

1111
我用browser kit库写了模拟登录的代码
1212

13-
现在不需要再去管viewstate了
13+
现在不需要再去管viewstate了,只需要知道链接的中文名称,和表格的ID即可
1414

1515
# 安装
1616

@@ -19,26 +19,14 @@
1919
composer install
2020
```
2121

22-
# 配置
23-
24-
由于每一个学校的正方教务都不尽相同
25-
26-
所以还是需要修改一点东西
22+
或者直接在项目文件夹执行:
23+
```shell
24+
composer require cheukfung/zfcrawler
25+
```
2726

28-
按照各自的正方教务的情况,修改ZFCrawler.php里的常量
27+
# 配置
2928

30-
```php
31-
<?php
32-
const LINK_INFORMATION = "个人信息"; //个人信息链接名称
33-
const LINK_SCORE = "成绩查询"; //成绩链接名称
34-
const BTN_SCORE = "历年成绩"; //查询所有成绩的按钮名称
35-
const LINK_SCHEDULE = "学生个人课表"; //课表链接名称
36-
const LINK_CET = "等级考试查询";
37-
const LINK_EXAM = "学生考试查询"; //考试安排链接名称
38-
const LOGIN_BUTTON_SELECTOR = "Button1": //登录按钮id
39-
const SCHEDULE_SELECTOR = "#Table1"; //课表表格id
40-
const COMMON_TABLE_SELECTOR = "#DataGrid1"; //普通表格id
41-
```
29+
由于每一个学校的正方教务都不尽相同,为了适应每一个学校,在实例化的时候传入配置参数即可
4230

4331
# 例子
4432

@@ -50,7 +38,23 @@ use ZFCrawler\ZFCrawler;
5038
$stu_id = '20161111111';//学号
5139
$password = 'password';//密码
5240
$user = ['stu_id' => $stu_id, 'stu_pwd' => $password];
53-
$crawler = new ZFCrawler($user, "http://210.37.0.27/");
41+
/*把下面的默认信息修改为你的学校教务系统的信息即可
42+
*不传如config参数则使用默认参数
43+
*/
44+
$config = array(
45+
'link_info' => "个人信息", //个人信息链接名称
46+
'link_score' => "成绩查询", //成绩链接名称
47+
'link_schedule' => "学生个人课表", //课表链接名称
48+
'link_cet' => "等级考试查询", //等级成绩链接名称
49+
'link_exam' => "学生考试查询", //考试安排链接名称
50+
'btn_score' => "历年成绩", //查询所有成绩的按钮名称
51+
'btn_login' => "Button1", //登录按钮标识:id或name
52+
'table_schedule' => '#Table1', //课表表格id
53+
'table_score' => '#Datagrid1', //成绩表格id
54+
'table_common' => "#DataGrid1", //普通表格id
55+
);
56+
$baseUri="http://210.37.0.27/";
57+
$crawler = new ZFCrawler($user, $baseUri,$config);
5458
try {
5559
// $info = $crawler->getInformation(); //个人信息
5660
// $info = $crawler->getSchedule(); //课表
@@ -59,7 +63,7 @@ try {
5963
// $info = $crawler->getExam();//考试安排
6064
echo json_encode($info);
6165
} catch (Exception $e) {
62-
echo $e->getMessage();
66+
echo $e->getCode() . $e->getMessage();
6367
}
6468
```
6569
# Exception
@@ -68,6 +72,21 @@ try {
6872

6973
容错可能不是很好,根据自己的情况进行修改
7074

75+
# Exception Code:
76+
10001:登录失败,教务系统返回相关alert
77+
10002:无法根据中文名称获取相关功能的页面url(原因:配置错误、教务系统关闭了页面入口)
78+
10003:查询成绩或其他信息出错,教务系统返回alert,比如没有评教时查询成绩
79+
10004:处理课表时出错,无法找到table
80+
***
81+
20001:页面访问出错(非200状态码),请检查网络的连通性,也不排除被反爬限制了
82+
20002:正方教务系统返回ERROR错误,原因未知,可能为:访问量太大,教务系统崩溃,被反爬策略识别,登录参数错误等等
83+
84+
# PHP 5.4
85+
86+
由于用到guzzleHttp,所以在php5.4里面运行会出错,原因是5.5之前没有curl_reset这个函数
87+
88+
解决方法就是把 guzzlehttp/guzzle/src/Handler/CurlFactory.php的curl_reset($resource);改为 $resource = curl_init();
89+
7190
# 案例
7291

7392
课程表

composer.json

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,11 @@
1414
],
1515
"require": {
1616
"php": ">=5.5.0",
17-
"guzzlehttp/guzzle": "~6.0",
18-
"symfony/dom-crawler": "^3.0",
19-
"symfony/css-selector": "^3.0",
20-
"symfony/browser-kit": "^3.1",
21-
"fabpot/goutte": "^3.1"
17+
"guzzlehttp/guzzle": "~6.2.2",
18+
"symfony/dom-crawler": "3.3",
19+
"symfony/css-selector": "3.3",
20+
"symfony/browser-kit": "3.3",
21+
"fabpot/goutte": "~3.1.2"
2222
},
2323
"autoload": {
2424
"psr-4": {

0 commit comments

Comments
 (0)