Php 以编程方式选择下拉值

Php 以编程方式选择下拉值,php,screen-scraping,Php,Screen Scraping,这是我正在处理的URL http://www.bkstr.com/CategoryDisplay/10001-9604-10311-1?demoKey=d 以下是下拉值: 选择您的程序:全部为常量 选择您的术语:2012年春季a常量 按课程ID搜索或选择您的部门:包含我需要从我的程序中逐个选择此值的值列表 下一个按课程ID搜索或选择您的课程的下拉列表将根据我们在上一个下拉列表中选择的内容显示 这是我试图自动化的部分 好的,点击提交,我得到了网址 http://www.bkstr.com/web

这是我正在处理的URL

http://www.bkstr.com/CategoryDisplay/10001-9604-10311-1?demoKey=d
以下是下拉值:

选择您的程序:全部为常量

选择您的术语:2012年春季a常量

按课程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
在这里,我可以看到选择的值作为查询参数传递,但这给我留下了一个问题:

每次在下拉列表中添加新值时,我都必须更改代码以合并该值
我如何通过编程动态地循环通过部门&它的后续课程,而不在我的查询参数中硬编码前面的值?有什么指导吗?

您需要以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为您的应用程序添加一个事件侦听器。假设你有这个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,您的侦听器如下所示。它应该获得上一个select值,并在此基础上构建另一个select

$(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();

});

这里有一个小问题:

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

如果您无法使用GUI访问服务器,则需要使用Rhino或NodeJS之类的工具来执行服务器端JavaScript