从selenium下拉列表中获取所有组合,不带选项或选择标记

时间:2014-09-11 14:53:17

标签: python selenium drop-down-menu selenium-webdriver

我正在与Selenium合作开发相应的网站:http://calstate-la.bncollege.com/webapp/wcs/stores/servlet/TBWizardView?catalogId=10001&langId=-1&storeId=30556

我在这个网站上的目标是从各自的下拉菜单中获取所有部门,课程和部分的组合。我遇到的主要问题是我无法想到从下拉菜单中获取值的任何方法。

根据与我类似的其他堆栈溢出问题,他们提到了使用select标签和选项标签的解决方案。但是,当我查看此页面源时,下拉菜单中没有此类标记。

所以我需要帮助尝试从下拉菜单中获取所有组合,但我不知道如何继续我的特殊情况。另外我想提一下我使用Python。

1 个答案:

答案 0 :(得分:2)

我实际上试图在这里使用selenium,但由于页面的异步性质而且#34;人工"它真的很快变得痛苦。下拉列表(here is what I had so far)。

这是使用requestsBeautifulSoup的替代方法(根本不需要浏览器)。

这个想法是模拟填充下拉列表的udnerlying请求:

from bs4 import BeautifulSoup
import requests

CATALOG = 10001
STORE = 30556

url = 'http://calstate-la.bncollege.com/webapp/wcs/stores/servlet/TBWizardView?catalogId={catalog}&langId=-1&storeId={store}'.format(catalog=CATALOG,
                                                                                                                                     store=STORE)
xhr_url = 'http://calstate-la.bncollege.com/webapp/wcs/stores/servlet/TextBookProcessDropdownsCmd'
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.94 Safari/537.36'}

session = requests.Session()
response = session.get(url, headers=headers)
soup = BeautifulSoup(response.content)

campus = soup.find('input', attrs={'name': 'campus1'}).get('value')
book_row = soup.find('div', class_='bookRowContainer')

params = {
    'campusId': campus,
    'deptId': '',
    'courseId': '',
    'sectionId': '',
    'storeId': STORE,
    'catalogId': CATALOG,
    'langId': '-1',
    'dropdown': 'term'
}

terms = book_row.select('li.termOption')
for term in terms:
    params['termId'] = term.get('data-optionvalue')
    response = session.post(xhr_url, params=params, headers=headers)
    print response.content

这将以JSON格式打印所有术语的所有部门。

2014年秋季:

[
    {"categoryName":"AAAS","categoryId":"63420700","categoryIdentifier":"670_1_F14_4","title":"AAAS"},
    {"categoryName":"ACCT","categoryId":"63420752","categoryIdentifier":"670_1_F14_5","title":"ACCT"},
    ...
]

2014年夏季:

[
    {"categoryName":"AAAS","categoryId":"63007512","categoryIdentifier":"670_1_A14_4","title":"AAAS"},
    {"categoryName":"ACCT","categoryId":"63007490","categoryIdentifier":"670_1_A14_5","title":"ACCT"},
    ...
]

CourseSection部分作为家庭作业。

希望有所帮助。