#php #html
#php #HTML
Вопрос:
Хорошо, я использую простой HTML DOM (https://simplehtmldom.sourceforge.io /) для получения некоторых данных со страницы.
Данные, которые я хотел бы получить, — это следующие параметры селектора:
<select name="element" class="selectbox">
<option value="1">O18FB-B1</option>
<option value="2">O18FB-B2</option>
<option value="3">O18FB-D1</option>
<option value="4">O18FB-D2</option>
<option value="5">O19BA-B</option>
<option value="6">O19BA-C1</option>
<option value="7">O19BA-C2</option>
<option value="8">O19FAMA</option>
<option value="9">O20BA-D1</option>
<option value="10">O20BA-D2</option>
<option value="11">O20BA-E1</option>
<option value="12">O20BA-E2</option>
<option value="13">O20FAMA1</option>
<option value="14">O20FAMA2</option>
<option value="15">O20FAMB1</option>
<option value="16">O20FAMB2</option>
<option value="17">O18AO-A</option>
<option value="18">O18IB-A</option>
<option value="19">O19AO-A</option>
<option value="20">O19IB-A</option>
<option value="21">O19MBIA</option>
<option value="22">O20AMTA</option>
<option value="23">O20EITA</option>
<option value="24">O20EITB</option>
<option value="25">O20SD-A</option>
<option value="26">O20SD-B</option>
<option value="27">O20SD-C</option>
<option value="28">O18JD-A</option>
<option value="29">O18JD-B</option>
<option value="30">O18JD-C</option>
<option value="31">O19JD-A</option>
<option value="32">O19JD-B</option>
<option value="33">O19JD-C</option>
<option value="34">O20JD-A</option>
<option value="35">O20JD-B</option>
<option value="36">O20JD-C</option>
<option value="37">O18MMCA</option>
<option value="38">O18MMCB</option>
<option value="39">O19MFAA</option>
<option value="40">O19MMCA</option>
<option value="41">O19MMCB</option>
<option value="42">O19MSRA</option>
<option value="43">O20MMCA</option>
<option value="44">O20MMCB</option>
<option value="45">O20MMCC</option>
<option value="46">O20OABA</option>
<option value="47">O20OABB</option>
<option value="48">O18OMSA</option>
<option value="49">O19OMSA</option>
<option value="50">O20OMSA</option>
<option value="51">O20OMSB</option>
<option value="52">O18CT</option>
<option value="53">O19CT</option>
<option value="54">O20CT</option>
</select>
Я использую этот код, чтобы получить его:
protected $html = 'https://rooster.horizoncollege.nl/rstr/ECO/AMR/400-ECO/Roosters/frames/navbar.htm';
public function getClasses()
{
$data = file_get_html($this->html);
$classes = $data->find('select', 2)->children();
return $classes;
}
И затем этот код, чтобы отобразить его на моей странице:
$options = new GetOptions();
$classes = $options->getClasses();
foreach ($classes as $class) {
$optionFormat = '<option value="%s">%s</option>';
$optionValue = $class->value;
$optionText = $class->plaintext;
echo sprintf($optionFormat, $optionValue, $optionText);
}
Но когда я смотрю на свою страницу, это то, что я получаю (буквально скопировано из элемента проверки Chrome):
<select name="class" class="selector w-full block border border-gray-400 rounded-lg p-3 outline-none">
________________________ </select>
Кто-нибудь знает, что я делаю не так? Я просмотрел страницу, и на ней нет элемента select с этим содержимым… Заранее спасибо.
Комментарии:
1. Попробуйте вместо этого это:
echo '<option value="'. $class->value .'">'. $class->plaintext .'</option>';
(прокомментируйте остальное в этом начале)…2. Спасибо за комментарий, однако это дает тот же результат.
<select name="class" class="selector w-full block border border-gray-400 rounded-lg p-3 outline-none"> <option value="1"> ____________________ </option> </select>
Ответ №1:
Ваш код правильный, но данных там нет.
Пожалуйста, посмотрите на исходный код вашей страницы. Не в инспекторе, а просто в исходном коде, который сначала поступает в ваш браузер. В Chrome вы можете сделать это с ctrl u
помощью Windows (посмотреть исходный код). Таким образом, вы увидите, что запрашиваемая вами страница не содержит никаких значений в элементе html select
, когда дело доходит до браузера. Эти значения заполняются позже с помощью функций javascript, но, к сожалению, простой HTML DOM не запускает javascript, поэтому его очистка с помощью этой библиотеки невозможна.
Вам нужно искать что-то, что может запускать javascript. Вероятно, какой-нибудь безголовый браузер был бы вариантом. Если вам нужно придерживаться PHP, вы можете начать с просмотра здесь:https://github.com/symfony/panther или здесь: https://github.com/php-webdriver/php-webdriver
Комментарии:
1. Ах, так параметры поступали со страницы, которая заполняла их с помощью javascript? Я как-то полностью пропустил это в вопросе.