Попытка помочь кому-то, кто работает в некоммерческой организации. В настоящее время пытаюсь получить информацию с сайта STL County Boards / Commissions (https://boards.stlouisco.com/).
Проблемы по нескольким причинам:
Собирался попытаться использовать BeautifulSoup, но фактические данные даже не отображаются, пока вы не выберете Board / Commission из раскрывающегося списка выше, поэтому я переключился на Selenium, в котором я новичок.
Возможна ли эта задача? Когда я смотрю на код html для сайта, я вижу, что информация не хранится на странице, а извлекается из другого места и просто отображается на сайте в зависимости от параметра, выбранного в раскрывающемся меню.
function ShowMemberList(selectedBoard) {
ClearMeetingsAndMembers();
var htmlString = "";
var boardsList = [{"id":407,"name":"Aging Ahead","isActive":true,"description":"... ...1.","totalSeats":14}];
var totalMembers = boardsList[$("select[name='BoardsList'] option:selected").index() - 1].totalSeats;
$.get("/api/boards/" + selectedBoard + "/members", function (data) {
if (data.length > 0) {
htmlString += "<table id=\"MemberTable\" class=\"table table-hover\">";
htmlString += "<thead><th>Member Name</th><th>Title</th><th>Position</th><th>Expiration Date</th></thead><tbody>";
for (var i = 0; i < totalMembers; i++) {
if (i < data.length) {
htmlString += "<tr><td>" + FormatString(data[i].firstName) + " " + FormatString(data[i].lastName) + "</td><td>" + FormatString(data[i].title) + "</td><td>" + FormatString(data[i].position) + "</td><td>" + FormatString(data[i].expirationDate) + "</td></tr>";
} else {
htmlString += "<tr><td colspan=\"4\">---Vacant Seat---</td></tr>"
}
}
htmlString += "</tbody></table>";
} else {
htmlString = "<span id=\"MemberTable\">There was no data found for this board.</span>";
}
$("#Results").append(htmlString);
});
}
Пока у меня есть это (немного), которое переходит на страницу и выбирает каждую доску из списка:
driver = webdriver.Chrome()
driver.get("https://boards.stlouisco.com/")
select = Select(wait(driver, 10).until(EC.presence_of_element_located((By.ID, 'BoardsList'))))
options = select.options
for board in options:
select.select_by_visible_text(board.text)
Отсюда я хотел бы иметь возможность очистить информация из MemberTable, но я не знаю, как двигаться дальше / если это что-то в пределах моих возможностей, или даже если это что-то возможно с Selenium.
Я пробовал использовать find_by a несколько разных элементов, которые нужно щелкнуть по таблице участников, но я встречал ошибки. Я также пытался вызвать memberstable после моего выбора, но он не смог найти этот элемент. Любые советы / указатели / советы приветствуются!