以编程方式选择下拉值

时间:2012-01-08 04:07:52

标签: php screen-scraping

这是我正在处理的网址

http://www.bkstr.com/CategoryDisplay/10001-9604-10311-1?demoKey=d

这些是下拉值:

选择您的程序:全部(常量)

选择你的学期:2012年春季(常数))

按课程ID搜索或选择您的部门:包含值列表(我需要从我的程序逐个选择此值)

下一个下拉菜单“按课程ID搜索或选择您的课程”将根据我们在上一个下拉菜单中选择的内容显示。

这是我试图自动化的部分。

好吧,点击提交后我会收到网址

http://www.bkstr.com/webapp/wcs/stores/servlet/CourseMaterialsResultsView?catalogId=10001&categoryId=9604&storeId=10311&langId=-1&programId=755&termId=100021416&divisionDisplayName=%20&departmentDisplayName=ADV&courseDisplayName=3001&sectionDisplayName=10182&demoKey=d&purpose=browsea

在这里,我可以看到所选的值作为查询参数传递但是这给我留下了一个问题:

  • 每次在下拉列表中添加一些新值时,我都必须更改我的代码以合并该值

我如何以编程方式(动态)循环部门&它的后续课程没有硬编码我的查询参数之前的值?有什么指导吗?

2 个答案:

答案 0 :(得分:1)

使用Selenium RC,假设您可以访问带GUI的服务器(它不需要与执行PHP的服务器相同)。有一个PHP版本,您可以使用它打开浏览器并模拟点击和与页面的其他交互。

http://seleniumhq.org/projects/remote-control/

如果您无法访问带有GUI的服务器,则需要使用Rhino或NodeJS等服务器端JavaScript。

答案 1 :(得分:0)

您需要将数据库中的列表课程“回显”到JS数组形式的页面,该数组对应于您部门的索引。请注意,数组从0开始计数,因此您的部门值也应该从0开始。这段代码应该在您的html的头部。

var courses = [
    ["course1-1","course1-2","course1-3","course1-4","course1-5"],
    ["course2-1","course2-2","course2-3","course2-4","course2-5"],
    ["course3-1","course3-2","course3-3","course3-4","course3-5"]
];

然后,使用javascript,为<select>添加一个事件监听器。说你有这个HTML

<select id="departments">
    <option value="0">dept1</option>
    <option value="1">dept2</option>
    <option value="2">dept3</option>
</select>

<select id="courses"></select>

对于jQuery,你的听众会是这样的。它应该获得先前的选择值并基于此,构建另一个选择。

$(document).ready(function(){


function setCourses() {
    var departmentValue = $('#departments').val();
    var courseOptions = "";
    for (i = 0; i < courses.length; i++) {
        courseOptions += "<option value=" + i + ">" +courses[departmentValue][i] + "</option>";
    }
    $("#courses").html(courseOptions);
}

$('#departments').change(function() {
    setCourses();
});

setCourses();

});

这是一个小提琴:http://jsfiddle.net/z5GTX/1/