Простой HTML DOM, возвращающий подчеркивания

#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, поэтому его очистка с помощью этой библиотеки невозможна.

Исходный код HTML

Вам нужно искать что-то, что может запускать javascript. Вероятно, какой-нибудь безголовый браузер был бы вариантом. Если вам нужно придерживаться PHP, вы можете начать с просмотра здесь:https://github.com/symfony/panther или здесь: https://github.com/php-webdriver/php-webdriver

Комментарии:

1. Ах, так параметры поступали со страницы, которая заполняла их с помощью javascript? Я как-то полностью пропустил это в вопросе.