我正在与Selenium合作开发相应的网站:http://calstate-la.bncollege.com/webapp/wcs/stores/servlet/TBWizardView?catalogId=10001&langId=-1&storeId=30556。
我在这个网站上的目标是从各自的下拉菜单中获取所有部门,课程和部分的组合。我遇到的主要问题是我无法想到从下拉菜单中获取值的任何方法。
根据与我类似的其他堆栈溢出问题,他们提到了使用select标签和选项标签的解决方案。但是,当我查看此页面源时,下拉菜单中没有此类标记。
所以我需要帮助尝试从下拉菜单中获取所有组合,但我不知道如何继续我的特殊情况。另外我想提一下我使用Python。
答案 0 :(得分:2)
我实际上试图在这里使用selenium
,但由于页面的异步性质而且#34;人工"它真的很快变得痛苦。下拉列表(here is what I had so far)。
这是使用requests
和BeautifulSoup
的替代方法(根本不需要浏览器)。
这个想法是模拟填充下拉列表的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"},
...
]
让Course
和Section
部分作为家庭作业。
希望有所帮助。