所以基本上我需要从 UCLA 书店网站获取部门、类(class)和部分的所有组合:http://shop.uclastore.com/courselistbuilder.aspx然后我需要选择书籍并解析生成的 html 页面。
我没有手动执行此操作(这将花费很长时间),而是寻找其他选项以编程方式执行此操作。我发现的一个选项是 Selenium WebDriver,它处理浏览器自动化。查看 SO 中的示例,我发现 Selenium WebDriver 是一个很有前途的功能,但我不太确定它是否能够完成我需要的功能。
或多或少采用伪代码格式,这是我如何使用 selenium Web 驱动程序的方法
go to the site: http://shop.uclastore.com/courselistbuilder.aspx
for each_department in department:
click on each_department
for each_course in course:
click on each_course
for each_section in section:
click on each_section
// After every department, course, and section has been chosen, we click choose books
click on choose books link
// Save the resulting html file
save next page as html file
我想知道我是否能够使用 Selenium WebDriver 做我想做的事情。如果有人可以提供更好的伪代码,将其与 Selenium WebDriver 更合适地结合在一起,那将会很有帮助,但我主要关注的是这个功能是否可行。我还想提一下,我计划在使用 Selenium 时使用 Python API。
最佳答案
您应该从这里开始(解释如下):
from selenium import webdriver
import time
from selenium.webdriver.support.select import Select
url = "http://shop.uclastore.com/courselistbuilder.aspx"
driver = webdriver.Firefox()
driver.get(url)
time.sleep(1)
departments = Select(driver.find_element_by_id('clDeptSelectBox'))
for department in departments.options:
# select department
departments.select_by_value(department.get_attribute('value'))
time.sleep(1)
cources = Select(driver.find_element_by_id('clCourseSelectBox'))
for cource in cources.options:
# select course
cources.select_by_value(cource.get_attribute('value'))
time.sleep(1)
sections = Select(driver.find_element_by_id('clSectionSelectBox'))
for section in sections.options:
print {'department': department.text,
'course': cource.text,
'section': section.text}
driver.close()
打印:
{'department': u'AFRCST - AFRICAN STUDIES', 'course': u'201A', 'section': u'1 - LYDON'}
{'department': u'AFRKLA - AFRICAN LANGUAGES', 'course': u'1A', 'section': u'1 - TA'}
{'department': u'AFRKLA - AFRICAN LANGUAGES', 'course': u'150A', 'section': u'1 - FANTA, A.A.'}
{'department': u'AFROAM - AFRO-AMERICAN STUDIES', 'course': u'6', 'section': u'1 - STREETER, C.A.'}
{'department': u'AFROAM - AFRO-AMERICAN STUDIES', 'course': u'M10A', 'section': u'1 - LYDON, G.E.'}
{'department': u'AFROAM - AFRO-AMERICAN STUDIES', 'course': u'M102', 'section': u'1 - LEWIS, L.I.'}
{'department': u'AFROAM - AFRO-AMERICAN STUDIES', 'course': u'M103A', 'section': u'1 - PRICE, Z.F.'}
{'department': u'AFROAM - AFRO-AMERICAN STUDIES', 'course': u'M104A', 'section': u'1 - YARBOROUGH'}
...
这个想法是广泛使用 Select
class它提供了一个很好的 API:select/options
功能。首先,我们获取所有部门,然后迭代选项并选择循环中的下一个部门。然后,在短暂的延迟之后,我们以相同的方式获取类(class)
和部分
列表。
我为您留下了更好的处理 Waits 的方法(time.sleep()
确实不太可靠),然后单击Choose Books
按钮(嗯,German Petrov 为您提供了两者)。
希望有帮助。
关于python - Selenium WebDriver 可以单击下拉菜单中的所有组合吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25747294/