Соскреб в Интернете в Javascript для сайта с измененными именами классов - PullRequest
0 голосов
/ 02 мая 2020

Я пытаюсь использовать Puppeteer для ввода адреса в ubereats (www.ubereats.com). Я понял, что перед вводом адреса мне нужно подождать, пока загрузится какой-нибудь значок, иначе текст просто будет удален. Для этого я использую:

page.waitForSelector("#wrapper > main > div.ao.ap.aq.ar.af > div.ag.bq.br.bs.bt > div > div.c1.af.bh.c2 > div > div.av.b3.ax > div > svg > path");

, который работает на данный момент. Однако проблема в том, что имена классов иногда меняются. Я не видел заметных закономерностей в изменениях. Я попытался использовать page.waitForXPath () вместо этого, потому что в нем нет имен классов, но это не сработало. Есть ли способ обойти меняющееся имя класса? Спасибо!

Редактировать: добавлен пример HTML. Это самые внутренние элементы, ведущие к значку, который я жду для загрузки. Некоторые из этих имен классов случайно меняются.

<div class="bi bj c3 at c4 c5 bd ae ar c6 c7 av af an">
   <div class="av b3 ax">
      <div class="c8 b1 c9">
         <svg width="24px" height="24px" fill="none" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" role="presentation" aria-hidden="true" focusable="false">
            <path d="M17.5834 5.16602C14.5001 2.08268 9.50008 2.08268 6.41675 5.16602C3.33341 8.24935 3.33341 13.3327 6.41675 16.416L12.0001 21.9993L17.5834 16.3327C20.6667 13.3327 20.6667 8.24935 17.5834 5.16602ZM12.0001 12.416C11.0834 12.416 10.3334 11.666 10.3334 10.7493C10.3334 9.83268 11.0834 9.08268 12.0001 9.08268C12.9167 9.08268 13.6667 9.83268 13.6667 10.7493C13.6667 11.666 12.9167 12.416 12.0001 12.416Z" fill="#000000"></path>
         </svg>
      </div>
   </div>
   <div class="b3 ca ah b5 b6"></div>
   <input role="combobox" aria-expanded="false" id="location-typeahead-home-input" aria-autocomplete="list" aria-controls="location-typeahead-home-menu" aria-labelledby="location-typeahead-home-label" autocomplete="off" value="" placeholder="Enter delivery address" class="bh bd cb cc">
   <div class="b3 ca ah b5 b6"></div>
</div>

1 Ответ

0 голосов
/ 03 мая 2020

Исходя из вашего HTML, если этот значок появляется только один раз на странице, вероятно, будут работать селекторы атрибутов, во-первых, поиск пути, дочерний элемент svg, который имеет атрибут "d", начинающийся с "M17". 5834 5.16602C14.5001 2.08268 ":

page.waitForSelector('svg > path[d^="M17.5834 5.16602C14.5001 2.08268"]');

Затем выберите селектор для входа, найдите вход, который имеет атрибут" заполнитель ", равный" Введите адрес доставки ":

input[placeholder="Enter delivery address"]

https://developer.mozilla.org/en-US/docs/Web/CSS/Attribute_selectors

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...