<?xml version="1.0" encoding="utf-8" ?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:tt="http://teletype.in/" xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/"><title>БАСЕР в КРИПТЕ</title><subtitle>YouTube - https://www.youtube.com/@baser_crypto
ТГ - @baser_crypto</subtitle><author><name>БАСЕР в КРИПТЕ</name></author><id>https://teletype.in/atom/baser_crypto</id><link rel="self" type="application/atom+xml" href="https://teletype.in/atom/baser_crypto?offset=0"></link><link rel="alternate" type="text/html" href="https://teletype.in/@baser_crypto?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=baser_crypto"></link><link rel="next" type="application/rss+xml" href="https://teletype.in/atom/baser_crypto?offset=10"></link><link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></link><updated>2026-05-29T17:23:14.919Z</updated><entry><id>baser_crypto:noQ5zJ9uEYq</id><link rel="alternate" type="text/html" href="https://teletype.in/@baser_crypto/noQ5zJ9uEYq?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=baser_crypto"></link><title>Как я искал квартиру и зачем мне понадобился BAS</title><published>2025-08-03T12:10:23.739Z</published><updated>2025-08-03T18:03:01.246Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img4.teletype.in/files/71/70/7170b8a7-7864-4904-bcf5-e111b57d7cd5.png"></media:thumbnail><summary type="html">&lt;img src=&quot;https://img2.teletype.in/files/53/fe/53fea1f5-3eed-41b8-bb1d-c7df6e93c045.png&quot;&gt;Это было еще в 2022 году, когда я искал квартиру. Очень быстро понял простую вещь: хорошие варианты держались пару минут. Ты только видишь новое объявление, думаешь «о, надо звонить», а оно уже сдано.</summary><content type="html">
  &lt;p id=&quot;WAtp&quot;&gt;Это было еще в &lt;em&gt;2022 году&lt;/em&gt;, когда я искал квартиру. Очень быстро понял простую вещь: &lt;strong&gt;хорошие варианты держались пару минут&lt;/strong&gt;. Ты только видишь новое объявление, думаешь &lt;em&gt;«о, надо звонить»&lt;/em&gt;, а оно уже &lt;strong&gt;сдано&lt;/strong&gt;.&lt;/p&gt;
  &lt;p id=&quot;UBjX&quot;&gt;Первые дни я реально сидел и обновлял страницу вручную. Но это быстро превратилось в пытку. Вроде занимаешься своими делами, потом вспоминаешь что надо чекнуть сайт, бросаешь все, обновляешь и там пусто. А потом отвлекся всего на полчаса и как назло именно в этот момент появляется хорошая квартира.&lt;/p&gt;
  &lt;p id=&quot;AIAx&quot;&gt;Короче стало понятно, что если продолжать так, то квартиру я найду только чудом.&lt;/p&gt;
  &lt;h2 id=&quot;kXid&quot;&gt;Решаю зайти в BAS&lt;/h2&gt;
  &lt;p id=&quot;WLok&quot;&gt;В какой-то момент я вспомнаю про &lt;strong&gt;BAS&lt;/strong&gt;. На тот момент я уже около полугода учился работать с ним, делал простые парсеры, регеры и разные мелкие штуки. Но всё это было больше ради практики. Тогда мне захотелось попробовать применить BAS в &lt;em&gt;реальном кейсе из жизни&lt;/em&gt;.&lt;/p&gt;
  &lt;p id=&quot;hzml&quot;&gt;Про запросы и API я тогда еще толком не знал, поэтому пошел по самому простому пути через браузер. Идея была простая: &lt;strong&gt;скрипт открывает сайт, проверяет новые объявления и если что-то появляется, сразу шлет мне сообщение в ТГ&lt;/strong&gt;.&lt;/p&gt;
  &lt;h2 id=&quot;I6zl&quot;&gt;Как это выглядело&lt;/h2&gt;
  &lt;p id=&quot;XcNl&quot;&gt;В BAS я накидал цикл, который каждые пару минут обновлял страницу с заданными параметрами квартиры. Скрипт вытаскивал заголовки и ссылки, брал ID из ссылки и сохранял их в глобальную переменную. После обновления страницы скрипт сравнивал ID последнего объявления на странице с переменной тем самым проверяя новое ли объявление появилось или висит старое. После чего присылал мне &lt;strong&gt;уведомление в ТГ.&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;18m3&quot;&gt;Работало это достаточно стабильно. Я спокойно занимался своими делами, а уведомления приходили сами.&lt;/p&gt;
  &lt;figure id=&quot;ObHK&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/14/81/14815bd4-abb2-4d9c-aa77-83e635895633.png&quot; width=&quot;396&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;ZDil&quot;&gt;Кстати, &lt;em&gt;на скриншоте видно как часто появлялись новые объявления&lt;/em&gt;, и это была ночь.&lt;/p&gt;
  &lt;h2 id=&quot;IpiA&quot;&gt;Что из этого вышло&lt;/h2&gt;
  &lt;p id=&quot;tibw&quot;&gt;Так я начал получать &lt;strong&gt;ссылки на новые квартиры прямо в телеграм&lt;/strong&gt;. Приходило уведомление, я сразу переходил по ссылке, смотрел объявление и звонил хозяину раньше многих других чтобы договориться.&lt;/p&gt;
  &lt;p id=&quot;0QO4&quot;&gt;Это дало &lt;strong&gt;огромную разницу во времени&lt;/strong&gt;. Даже если квартира появлялась ночью, бот всё равно присылал мне уведомление. На скрине видно как часто выкладывали новые объявления, и это реально была ночь.&lt;/p&gt;
  &lt;p id=&quot;Z1YH&quot;&gt;В итоге именно с помощью этого скрипта я и нашел себе квартиру. &lt;strong&gt;BAS сэкономил мне кучу времени и нервов&lt;/strong&gt;.&lt;/p&gt;
  &lt;h2 id=&quot;Y3up&quot;&gt;Что бы я сделал сейчас&lt;/h2&gt;
  &lt;p id=&quot;A26V&quot;&gt;Сейчас я уже лучше разбираюсь в BAS и понимаю, что тогда можно было сделать всё проще и быстрее. Я бы использовал &lt;em&gt;запросы вместо браузера&lt;/em&gt;, это работало бы быстрее и легче. Сохранял бы данные в БД прямо в BAS, чтобы удобно проверять историю.&lt;/p&gt;
  &lt;p id=&quot;s21n&quot;&gt;Еще добавил бы, чтобы сразу видеть, &lt;strong&gt;фото, описание, номер телефона&lt;/strong&gt; а не только ссылку и цену. И подключил бы сразу несколько сайтов. Тогда вероятность найти квартиру была бы еще выше.&lt;/p&gt;
  &lt;p id=&quot;548f&quot;&gt;&lt;em&gt;Но даже тот первый вариант, собранный кое-как, отлично сработал.&lt;/em&gt;&lt;/p&gt;
  &lt;h2 id=&quot;30uY&quot;&gt;Вывод&lt;/h2&gt;
  &lt;p id=&quot;SebC&quot;&gt;Для меня это был реально полезный опыт. &lt;strong&gt;BAS смог помочь не только в сложных проектах, но и в самых простых бытовых задачах&lt;/strong&gt;. Хочешь найти квартиру, билеты или какой-то редкий товар, пишем простенький скрипт тем самым &lt;em&gt;экономя свое драгоценное время&lt;/em&gt;.&lt;/p&gt;
  &lt;p id=&quot;kTTC&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;Cn9l&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;6Dj8&quot;&gt;YouTube - &lt;a href=&quot;https://www.youtube.com/@baser_crypto&quot; target=&quot;_blank&quot;&gt;https://www.youtube.com/@baser_crypto&lt;/a&gt;&lt;br /&gt;ТГ - @baser_crypto&lt;/p&gt;

</content></entry><entry><id>baser_crypto:8KJSrKt7EQV</id><link rel="alternate" type="text/html" href="https://teletype.in/@baser_crypto/8KJSrKt7EQV?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=baser_crypto"></link><title>Самое важное о селекторах в BAS</title><published>2025-05-10T16:55:18.022Z</published><updated>2025-05-11T18:06:42.227Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img4.teletype.in/files/f5/5a/f55a234c-c19c-41bb-b754-07618f0e6c0c.png"></media:thumbnail><summary type="html">&lt;img src=&quot;https://img3.teletype.in/files/a1/7f/a17f143f-05ae-4e35-bf20-99592f29cb24.jpeg&quot;&gt;Большинство новичков при создании скриптов даже не задумываются, насколько важен выбор селектора — берут первый попавшийся, чаще всего CSS, и не знают, что есть другие, часто более удобные варианты.</summary><content type="html">
  &lt;p id=&quot;CGnP&quot;&gt;Большинство новичков при создании скриптов даже не задумываются, насколько важен выбор селектора — берут первый попавшийся, чаще всего CSS, и не знают, что есть другие, часто более удобные варианты. &lt;/p&gt;
  &lt;p id=&quot;HMjt&quot;&gt;В итоге селекторы получаются ненадёжными (сломаются при первом же обновлении сайта). Давайте разберёмся, какие способы выбора элементов вообще есть в BAS, и какие из них действительно стоит использовать.&lt;/p&gt;
  &lt;figure id=&quot;JxJ9&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/43/b7/43b7c7d7-3157-4de1-a1ec-63bb866fbebe.png&quot; width=&quot;684&quot; /&gt;
  &lt;/figure&gt;
  &lt;h2 id=&quot;XiNe&quot;&gt;1. CSS. Что такое DOM и откуда берутся классы и ID&lt;/h2&gt;
  &lt;p id=&quot;ayoh&quot;&gt;Когда ты открываешь сайт ты видишь кнопки, поля, тексты. &lt;/p&gt;
  &lt;p id=&quot;NNuz&quot;&gt;Но под капотом у каждой страницы есть &lt;strong&gt;структура&lt;/strong&gt;, которая описывает всё это. &lt;s&gt;Она называется &lt;strong&gt;DOM&lt;/strong&gt; — Document Object Model&lt;/s&gt; (да не важно как она называется)&lt;/p&gt;
  &lt;p id=&quot;vb0k&quot;&gt;Проще говоря, это &lt;strong&gt;дерево из элементов&lt;/strong&gt;: &lt;code&gt;div&lt;/code&gt;, &lt;code&gt;button&lt;/code&gt;, &lt;code&gt;input&lt;/code&gt; и так далее&lt;/p&gt;
  &lt;p id=&quot;1WZk&quot;&gt;DOM - это структура, по которой построена любая страница. Она выглядит как &lt;strong&gt;вложенные &amp;quot;контейнеры&amp;quot;&lt;/strong&gt; — один элемент находится внутри другого. Всё это описывается с помощью &lt;strong&gt;HTML-тегов&lt;/strong&gt;: &lt;code&gt;div&lt;/code&gt;, &lt;code&gt;span&lt;/code&gt;, &lt;code&gt;input&lt;/code&gt;, &lt;code&gt;button&lt;/code&gt;, и так далее.&lt;/p&gt;
  &lt;p id=&quot;GlDY&quot;&gt;Пример простого фрагмента:&lt;/p&gt;
  &lt;pre id=&quot;mNIv&quot; data-lang=&quot;html&quot;&gt;&amp;lt;div class=&amp;quot;form&amp;quot;&amp;gt;
  &amp;lt;input id=&amp;quot;email&amp;quot; placeholder=&amp;quot;Email&amp;quot;&amp;gt;
  &amp;lt;button&amp;gt;Отправить&amp;lt;/button&amp;gt;
&amp;lt;/div&amp;gt;&lt;/pre&gt;
  &lt;ul id=&quot;1qtK&quot;&gt;
    &lt;li id=&quot;smFD&quot;&gt;&lt;code&gt;div&lt;/code&gt; — это просто блок (контейнер), в нём могут быть другие элементы.&lt;/li&gt;
    &lt;li id=&quot;tjXt&quot;&gt;&lt;code&gt;input&lt;/code&gt; — поле ввода&lt;/li&gt;
    &lt;li id=&quot;Lcww&quot;&gt;&lt;code&gt;button&lt;/code&gt; — кнопка&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h3 id=&quot;wQMR&quot;&gt;Частая ошибка: селекторы вида &lt;code&gt;:nth-child(...)&lt;/code&gt;&lt;/h3&gt;
  &lt;p id=&quot;otw6&quot;&gt;Многие новички, не зная, за что зацепиться, просто берут путь до элемента, который генерирует BAS по умолчанию. Получается что-то вроде:&lt;/p&gt;
  &lt;pre id=&quot;T65y&quot; data-lang=&quot;html&quot;&gt;&amp;gt;CSS&amp;gt; :nth-child(1) &amp;gt; :nth-child(1) &amp;gt; :nth-child(2) &amp;gt; :nth-child(1) &amp;gt; img&lt;/pre&gt;
  &lt;p id=&quot;cLXk&quot;&gt;Когда ты используешь &lt;code&gt;:nth-child(...)&lt;/code&gt;, ты говоришь: &amp;quot;дай мне второй элемент внутри вот этого блока, внутри другого блока и тд&amp;quot;.&lt;br /&gt;Если туда случайно добавят ещё один &lt;code&gt;div&lt;/code&gt;, то счёт &lt;strong&gt;сдвинется&lt;/strong&gt;, и BAS нажмёт не туда. Поэтому такие селекторы — &lt;strong&gt;хрупкие&lt;/strong&gt;.&lt;/p&gt;
  &lt;p id=&quot;5M19&quot;&gt;&lt;strong&gt;На первый взгляд - работает. Но на деле:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;11FU&quot;&gt;
    &lt;li id=&quot;mlmP&quot;&gt;Такой селектор &lt;strong&gt;зависит от точной структуры страницы&lt;/strong&gt;, и если добавится хоть один новый &lt;code&gt;div&lt;/code&gt; — он &lt;strong&gt;перестанет находить элемент&lt;/strong&gt;.&lt;/li&gt;
    &lt;li id=&quot;BVer&quot;&gt;Невозможно понять, что он делает.&lt;/li&gt;
    &lt;li id=&quot;4UYJ&quot;&gt;При обновлении сайта он почти наверняка сломается.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;YcLN&quot;&gt;&lt;strong&gt;&lt;u&gt;Вот простой пример:&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;T9cj&quot; data-lang=&quot;html&quot;&gt;&amp;lt;div class=&amp;quot;form&amp;quot;&amp;gt;
  &amp;lt;input id=&amp;quot;email&amp;quot; type=&amp;quot;text&amp;quot;&amp;gt;
  &amp;lt;button class=&amp;quot;btn-submit&amp;quot;&amp;gt;Отправить&amp;lt;/button&amp;gt;
&amp;lt;/div&amp;gt;&lt;/pre&gt;
  &lt;p id=&quot;Ujfm&quot;&gt;&lt;strong&gt;&lt;u&gt;Каждый элемент может иметь:&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;zk35&quot;&gt;
    &lt;li id=&quot;V898&quot;&gt;&lt;strong&gt;ID&lt;/strong&gt; — уникальный идентификатор (&lt;code&gt;id=&amp;quot;email&amp;quot;&lt;/code&gt;),&lt;/li&gt;
    &lt;li id=&quot;ZQQM&quot;&gt;&lt;strong&gt;Class&lt;/strong&gt; — класс или группа (например, &lt;code&gt;class=&amp;quot;btn-submit&amp;quot;&lt;/code&gt;),&lt;/li&gt;
    &lt;li id=&quot;FrDn&quot;&gt;&lt;strong&gt;Атрибуты&lt;/strong&gt; — всё остальное (&lt;code&gt;type=&amp;quot;text&amp;quot;&lt;/code&gt;, &lt;code&gt;placeholder=&amp;quot;Ваш e-mail&amp;quot;&lt;/code&gt; и т.д.).&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;sfKJ&quot;&gt;Ты не видишь этого на сайте, но BAS видит. Именно по этой структуре BAS может понять, куда нажать или что заполнить.&lt;/p&gt;
  &lt;p id=&quot;pGwz&quot;&gt;Вот пример надежных селекторов которые можно не стесняться использовать они скорее всего, не поменяются при следующем обновлении сайта:&lt;/p&gt;
  &lt;pre id=&quot;OV1Y&quot; data-lang=&quot;html&quot;&gt;id=&amp;quot;login&amp;quot;
id=&amp;quot;userpassword&amp;quot;
class=&amp;quot;email&amp;quot;
class=&amp;quot;password&amp;quot;&lt;/pre&gt;
  &lt;p id=&quot;7y9C&quot;&gt;В BAS они будут выглядеть так:&lt;/p&gt;
  &lt;pre id=&quot;2H1K&quot; data-lang=&quot;html&quot;&gt;&amp;gt;CSS&amp;gt; #login
&amp;gt;CSS&amp;gt; #userpassword
&amp;gt;CSS&amp;gt; .email
&amp;gt;CSS&amp;gt; .password&lt;/pre&gt;
  &lt;hr /&gt;
  &lt;h3 id=&quot;56a5&quot;&gt;Почему так?&lt;/h3&gt;
  &lt;p id=&quot;QoGP&quot;&gt;Это особенность HTML и CSS:&lt;/p&gt;
  &lt;ul id=&quot;mHgs&quot;&gt;
    &lt;li id=&quot;Hfqn&quot;&gt;&lt;strong&gt;&lt;code&gt;id=&amp;quot;...&amp;quot;&lt;/code&gt;&lt;/strong&gt; - это &lt;strong&gt;уникальный идентификатор&lt;/strong&gt;. В CSS (и в BAS) он обозначается &lt;strong&gt;через решётку &lt;code&gt;#&lt;/code&gt;&lt;/strong&gt;.&lt;/li&gt;
    &lt;li id=&quot;xlW1&quot;&gt;&lt;strong&gt;&lt;code&gt;class=&amp;quot;...&amp;quot;&lt;/code&gt;&lt;/strong&gt; - это &lt;strong&gt;группа или категория&lt;/strong&gt;, и она обозначается &lt;strong&gt;через точку &lt;code&gt;.&lt;/code&gt;&lt;/strong&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;siyS&quot;&gt;&lt;strong&gt;Примеры:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;R5Jg&quot;&gt;
    &lt;li id=&quot;tlO3&quot;&gt;&lt;code&gt;#login&lt;/code&gt; - означает: &amp;quot;элемент с id &lt;code&gt;login&lt;/code&gt;&amp;quot;&lt;/li&gt;
    &lt;li id=&quot;mSMp&quot;&gt;&lt;code&gt;.email&lt;/code&gt; - означает: &amp;quot;элемент с классом &lt;code&gt;email&lt;/code&gt;&amp;quot;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;oC6s&quot;&gt;Когда мы пишем:&lt;/p&gt;
  &lt;pre id=&quot;gC2c&quot;&gt;&amp;gt;CSS&amp;gt; #login&lt;/pre&gt;
  &lt;p id=&quot;cy9l&quot;&gt;это значит — найти элемент с &lt;strong&gt;id=&amp;quot;login&amp;quot;&lt;/strong&gt;. Символ &lt;code&gt;#&lt;/code&gt; — это стандарт в CSS.&lt;/p&gt;
  &lt;p id=&quot;STqW&quot;&gt;А если так:&lt;/p&gt;
  &lt;pre id=&quot;0fxz&quot;&gt;&amp;gt;CSS&amp;gt; .email&lt;/pre&gt;
  &lt;p id=&quot;AuHv&quot;&gt;это элемент с &lt;strong&gt;class=&amp;quot;email&amp;quot;&lt;/strong&gt;. Символ &lt;code&gt;.&lt;/code&gt; — для классов.&lt;/p&gt;
  &lt;p id=&quot;Wj1v&quot;&gt;Также можно обратиться к атрибутам:&lt;/p&gt;
  &lt;pre id=&quot;hSXm&quot;&gt;&amp;gt;CSS&amp;gt; input[placeholder=&amp;quot;Email&amp;quot;]&lt;/pre&gt;
  &lt;p id=&quot;xZeA&quot;&gt;Это значит: найти &lt;code&gt;input&lt;/code&gt;, у которого есть &lt;code&gt;placeholder=&amp;quot;Email&amp;quot;&lt;/code&gt;. Атрибут &lt;code&gt;placeholder&lt;/code&gt; — это &lt;strong&gt;текст-подсказка&lt;/strong&gt;, который отображается внутри поля ввода до того, как пользователь начнёт что-то печатать&lt;/p&gt;
  &lt;p id=&quot;8ae6&quot;&gt;&lt;strong&gt;Пример: &lt;/strong&gt;&lt;/p&gt;
  &lt;figure id=&quot;UzIo&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/ad/2a/ad2aad85-8a20-4044-ab4b-06d977da197a.png&quot; width=&quot;423&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;22AY&quot;&gt;На сайте ты увидишь это как серый текст внутри поля.&lt;/p&gt;
  &lt;p id=&quot;jekN&quot;&gt;&lt;strong&gt;Этот атрибут очень удобно использовать в BAS, потому что:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;tdE4&quot;&gt;
    &lt;li id=&quot;hMxv&quot;&gt;Он часто бывает &lt;strong&gt;уникальным и стабильным&lt;/strong&gt;.&lt;/li&gt;
    &lt;li id=&quot;C4wu&quot;&gt;Его &lt;strong&gt;видно на экране&lt;/strong&gt;, и ты можешь сразу понять, к чему он относится.&lt;/li&gt;
    &lt;li id=&quot;Q312&quot;&gt;Он не меняется от структуры страницы, как классы или id.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;mXoi&quot;&gt;&lt;strong&gt;Важно:&lt;/strong&gt; ты не обязан использовать всё подряд. Не нужно писать сразу &lt;code&gt;div &amp;gt; span &amp;gt; input&lt;/code&gt;. Достаточно &lt;strong&gt;одного хорошего признака&lt;/strong&gt;, который стабилен.&lt;/p&gt;
  &lt;h3 id=&quot;5Fcq&quot;&gt;&lt;strong&gt;Если на элементе есть и &lt;code&gt;id&lt;/code&gt;, и &lt;code&gt;class&lt;/code&gt;, лучше использовать &lt;code&gt;id&lt;/code&gt;.&lt;/strong&gt;&lt;/h3&gt;
  &lt;p id=&quot;Rqsb&quot;&gt;&lt;strong&gt;Пример:&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;srxD&quot;&gt;&amp;lt;input id=&amp;quot;emailInput&amp;quot; class=&amp;quot;input email&amp;quot;&amp;gt;&lt;/pre&gt;
  &lt;p id=&quot;sdEc&quot;&gt;Селектор &lt;code&gt;&amp;gt;CSS&amp;gt; #emailInput&lt;/code&gt; будет &lt;strong&gt;более точным&lt;/strong&gt; и уникальным, чем &lt;code&gt;&amp;gt;CSS&amp;gt; .email&lt;/code&gt;.&lt;br /&gt;В HTML &lt;code&gt;id&lt;/code&gt; должен быть &lt;strong&gt;уникальным на странице&lt;/strong&gt;, а вот классы часто повторяются.&lt;/p&gt;
  &lt;p id=&quot;5Q50&quot;&gt;&lt;strong&gt;Поэтому правило простое:&lt;/strong&gt;&lt;/p&gt;
  &lt;blockquote id=&quot;xmzG&quot;&gt;Если у элемента есть &lt;code&gt;id&lt;/code&gt; - используй его. Если нет - ищи по &lt;code&gt;class&lt;/code&gt; или другим атрибутам (&lt;code&gt;placeholder&lt;/code&gt;, &lt;code&gt;name&lt;/code&gt; и т.д.)&lt;/blockquote&gt;
  &lt;p id=&quot;9uO7&quot;&gt;&lt;strong&gt;Когда это работает хорошо?&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;MolT&quot;&gt;
    &lt;li id=&quot;xgke&quot;&gt;Когда &lt;code&gt;id&lt;/code&gt; и &lt;code&gt;class&lt;/code&gt; звучат логично, а не сгенерированы автоматически&lt;/li&gt;
    &lt;li id=&quot;flhF&quot;&gt;Когда они не меняются от запуска к запуску и не зависят от языка или содержимого&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h3 id=&quot;Yzhw&quot;&gt;А вот так делать не стоит:&lt;/h3&gt;
  &lt;pre id=&quot;PRIT&quot; data-lang=&quot;html&quot;&gt;class=&amp;quot;x9s7q3d&amp;quot;
class=&amp;quot;input-98af_x&amp;quot;
id=&amp;quot;b12&amp;quot;&lt;/pre&gt;
  &lt;ul id=&quot;NDgS&quot;&gt;
    &lt;li id=&quot;ornF&quot;&gt;Случайные символы, автогенерация, ничего не говорят о назначении элемента&lt;/li&gt;
    &lt;li id=&quot;5OTl&quot;&gt;Сегодня это поле для пароля, а завтра уже что-то другое&lt;/li&gt;
    &lt;li id=&quot;29pN&quot;&gt;Такие селекторы ломаются при любой правке фронтенда, а могут быть динамичными, и меняться каждый день&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h2 id=&quot;RJ7c&quot;&gt;TL;DR по CSS&lt;/h2&gt;
  &lt;p id=&quot;mCX4&quot;&gt;&lt;strong&gt;&lt;u&gt;CSS-селекторы отлично подходят, когда:&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;rlAv&quot;&gt;
    &lt;li id=&quot;4VUB&quot;&gt;У элемента есть стабильный и осмысленный &lt;code&gt;id&lt;/code&gt; или &lt;code&gt;class&lt;/code&gt;&lt;/li&gt;
    &lt;li id=&quot;VSD7&quot;&gt;Есть логичный атрибут (&lt;code&gt;name&lt;/code&gt;, &lt;code&gt;type&lt;/code&gt;, &lt;code&gt;placeholder&lt;/code&gt;, &lt;code&gt;value&lt;/code&gt;)&lt;/li&gt;
    &lt;li id=&quot;iies&quot;&gt;Ты хочешь задать точное и универсальное правило&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;p5ia&quot;&gt;Избегай всего, что выглядит как автоматически сгенерированное, и не строй селекторы только на структуре.&lt;/p&gt;
  &lt;p id=&quot;Zchn&quot;&gt;CSS хорош тем, что &lt;strong&gt;быстрее, чем MATCH&lt;/strong&gt;, но требует чуть больше внимания и понимания, что именно ты выбираешь.&lt;/p&gt;
  &lt;p id=&quot;wqn9&quot;&gt;&lt;/p&gt;
  &lt;h2 id=&quot;FIPq&quot;&gt;2. MATCH — самый простой способ находить элементы в BAS&lt;/h2&gt;
  &lt;p id=&quot;6FyN&quot;&gt;&lt;strong&gt;&lt;u&gt;Возьмем пример, у нас в коде элемента есть вот такое:&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;ndaz&quot; data-lang=&quot;html&quot;&gt;&amp;lt;input id=&amp;quot;input-98af_x&amp;quot; 
class=&amp;quot;x9s7q3d&amp;quot; 
placeholder=&amp;quot;Email/Sub-Account&amp;quot;
type=&amp;quot;text&amp;quot; value=&amp;quot;&amp;quot;&amp;gt;=&amp;quot;&amp;quot;&amp;gt;&lt;/pre&gt;
  &lt;p id=&quot;8WkO&quot;&gt;ID и класс нам не подойдут, так как они содержат набор случайных букв и цифр, которые будут меняться. Что я предлагаю: взять атрибут &lt;code&gt;placeholder&lt;/code&gt; и использовать метод MATCH. Вот как в итоге будет выглядеть структура в самом BAS, чтобы найти нужный элемент среди кучи бессмысленных классов:&lt;/p&gt;
  &lt;figure id=&quot;yW6G&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/87/a5/87a5e30c-e934-462b-afbe-25974616236e.png&quot; width=&quot;1045&quot; /&gt;
  &lt;/figure&gt;
  &lt;h3 id=&quot;0EQm&quot;&gt;Что это за &lt;code&gt;&amp;gt;AT&amp;gt;0&lt;/code&gt; в конце?&lt;/h3&gt;
  &lt;p id=&quot;Ofkp&quot;&gt;Дело в том, что &lt;strong&gt;MATCH может найти сразу несколько элементов&lt;/strong&gt;, подходящих под условие. Например, если на странице есть два поля с одинаковым &lt;code&gt;placeholder&lt;/code&gt;, BAS не знает, какое из них выбрать и может нажать не туда.&lt;/p&gt;
  &lt;p id=&quot;pjGQ&quot;&gt;&lt;code&gt;&amp;gt;AT&amp;gt;0&lt;/code&gt; означает: &lt;strong&gt;использовать первый подходящий элемент&lt;/strong&gt;.&lt;br /&gt; В программировании отсчёт начинается с нуля, поэтому:&lt;/p&gt;
  &lt;ul id=&quot;QBkA&quot;&gt;
    &lt;li id=&quot;cR2m&quot;&gt;&lt;code&gt;&amp;gt;AT&amp;gt;0&lt;/code&gt; — это первый элемент&lt;/li&gt;
    &lt;li id=&quot;fQLq&quot;&gt;&lt;code&gt;&amp;gt;AT&amp;gt;1&lt;/code&gt; — второй&lt;/li&gt;
    &lt;li id=&quot;qOhL&quot;&gt;&lt;code&gt;&amp;gt;AT&amp;gt;2&lt;/code&gt; — третий и так далее&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;67uc&quot;&gt;Если не указать &lt;code&gt;AT&lt;/code&gt;, BAS может сработать нестабильно и сегодня нажмёт на нужный элемент, завтра на соседний.&lt;/p&gt;
  &lt;p id=&quot;K2T3&quot;&gt;&lt;/p&gt;
  &lt;h2 id=&quot;ut0L&quot;&gt;3. РАЗБИРАЕМ НА ПРИМЕРЕ&lt;/h2&gt;
  &lt;p id=&quot;o3wh&quot;&gt;&lt;strong&gt;К примеру возьмем Ютуб:&lt;/strong&gt;&lt;/p&gt;
  &lt;figure id=&quot;psga&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/cf/47/cf473c10-cfd5-4926-92f1-91e0af46ec6a.png&quot; width=&quot;837&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;3Nud&quot;&gt;&lt;strong&gt;Если мы наведемся на кнопку лайка и откроем правой кнопкой мышки код элемента в структуре мы увидим следующее: &lt;/strong&gt;&lt;/p&gt;
  &lt;figure id=&quot;vMnQ&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/9c/47/9c47ac7b-622a-4690-aa4f-70a15ce44725.png&quot; width=&quot;601&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;7z2p&quot;&gt;Как мы видим у нас нет как такого явного класса, или же айди. Но это не значит, что элемент нельзя зацепить&lt;/p&gt;
  &lt;p id=&quot;eSBS&quot;&gt;&lt;strong&gt;Что мы можем с этого достать: &lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;Rp1I&quot;&gt;&lt;u&gt;&lt;strong&gt;aria-label=&amp;quot;like this video along with 10 other people&amp;quot;&lt;/strong&gt;&lt;/u&gt;&lt;/p&gt;
  &lt;p id=&quot;kWOe&quot;&gt;&lt;u&gt;&lt;strong&gt;title=&amp;quot;I like this&amp;quot;&lt;/strong&gt;&lt;/u&gt;&lt;/p&gt;
  &lt;h4 id=&quot;9SjY&quot;&gt;&lt;strong&gt;&lt;code&gt;aria-label=&amp;quot;like this video along with 10 other people&amp;quot;&lt;/code&gt;&lt;/strong&gt;&lt;/h4&gt;
  &lt;p id=&quot;COeS&quot;&gt;Использовать как есть - &lt;strong&gt;плохо&lt;/strong&gt;, потому что часть &lt;code&gt;&amp;quot;10 other people&amp;quot;&lt;/code&gt; будет меняться&lt;/p&gt;
  &lt;p id=&quot;IPzB&quot;&gt;Но можно использовать Match с частью строки:&lt;/p&gt;
  &lt;pre id=&quot;adR1&quot;&gt;&amp;gt;MATCH&amp;gt; like this video&amp;gt;AT&amp;gt;0&lt;/pre&gt;
  &lt;p id=&quot;frqN&quot;&gt;или CSS с &lt;code&gt;*=&lt;/code&gt; (содержит):&lt;/p&gt;
  &lt;pre id=&quot;uRDa&quot;&gt;&amp;gt;CSS&amp;gt; button[aria-label*=&amp;quot;like this video&amp;quot;]&lt;/pre&gt;
  &lt;p id=&quot;7Utv&quot;&gt;Пример кнопки входа:&lt;/p&gt;
  &lt;figure id=&quot;UHwl&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/e5/4e/e54ea1ea-99d2-42a5-a153-2ac7e9e7b122.png&quot; width=&quot;451&quot; /&gt;
  &lt;/figure&gt;
  &lt;h3 id=&quot;7cHb&quot;&gt;Код элемента: &lt;/h3&gt;
  &lt;pre id=&quot;NnV3&quot; data-lang=&quot;html&quot;&gt;&amp;lt;button class=&amp;quot;_root_79e1v_50 _primary_79e1v_85&amp;quot; 
aria-describedby=&amp;quot;&amp;quot; aria-disabled=&amp;quot;false&amp;quot; type=&amp;quot;submit&amp;quot; 
name=&amp;quot;intent&amp;quot; value=&amp;quot;email&amp;quot;&amp;gt;Continue&amp;lt;/button&amp;gt;&lt;/pre&gt;
  &lt;p id=&quot;FVHA&quot;&gt;Я вижу для себя 3 варианта, как мы можем использовать MATCH здесь, потому что class выглядит как 💩&lt;/p&gt;
  &lt;p id=&quot;Moxs&quot;&gt;Вариант 1:&lt;/p&gt;
  &lt;pre id=&quot;kaW3&quot;&gt;&amp;gt;MATCH&amp;gt;type=&amp;quot;submit&amp;quot;&amp;gt;AT&amp;gt;0&lt;/pre&gt;
  &lt;p id=&quot;n7O7&quot;&gt;&lt;strong&gt;Почему:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;HsRx&quot;&gt;
    &lt;li id=&quot;22Cn&quot;&gt;Атрибут &lt;code&gt;type=&amp;quot;submit&amp;quot;&lt;/code&gt; встречается только у кнопок отправки форм.&lt;/li&gt;
    &lt;li id=&quot;Jnp6&quot;&gt;Если это &lt;strong&gt;единственная&lt;/strong&gt; такая кнопка на странице — работает отлично.&lt;/li&gt;
    &lt;li id=&quot;vn8y&quot;&gt;Если на странице есть несколько &lt;code&gt;submit&lt;/code&gt;, &lt;strong&gt;обязательно указываем &lt;code&gt;&amp;gt;AT&amp;gt;&lt;/code&gt;&lt;/strong&gt;.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;8mEz&quot;&gt;Вариант 2:&lt;/p&gt;
  &lt;pre id=&quot;avN0&quot;&gt;&amp;gt;MATCH&amp;gt;value=&amp;quot;email&amp;quot;&amp;gt;AT&amp;gt;0&lt;/pre&gt;
  &lt;p id=&quot;3JBx&quot;&gt;&lt;strong&gt;Почему:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;Bl9F&quot;&gt;
    &lt;li id=&quot;v1f0&quot;&gt;Атрибут &lt;code&gt;value=&amp;quot;email&amp;quot;&lt;/code&gt; это скрытая &amp;quot;цель&amp;quot; кнопки, и на большинстве сайтов он остаётся стабильным.&lt;/li&gt;
    &lt;li id=&quot;lDnj&quot;&gt;Хороший выбор, если на странице есть другие кнопки, но они с другими &lt;code&gt;value&lt;/code&gt;.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;um6U&quot;&gt;Вариант 3:&lt;/p&gt;
  &lt;pre id=&quot;5urC&quot;&gt;&amp;gt;MATCH&amp;gt;Continue&amp;gt;AT&amp;gt;0&lt;/pre&gt;
  &lt;p id=&quot;GVzu&quot;&gt;&lt;strong&gt;Почему:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;Hrsb&quot;&gt;
    &lt;li id=&quot;WJHv&quot;&gt;Поиск по тексту кнопки самый читаемый и понятный способ.&lt;/li&gt;
    &lt;li id=&quot;5rmP&quot;&gt;Но он зависит от &lt;strong&gt;языка страницы&lt;/strong&gt; если пользователь сменит язык, кнопка может называться иначе.&lt;/li&gt;
    &lt;li id=&quot;V11k&quot;&gt;Работает, если ты уверен, что текст стабилен.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h2 id=&quot;w9oN&quot;&gt;TL;DR по MATCH&lt;/h2&gt;
  &lt;p id=&quot;rlHd&quot;&gt;&lt;strong&gt;1. Всегда указывай &lt;code&gt;&amp;gt;AT&amp;gt;0&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;xDGt&quot;&gt;
    &lt;li id=&quot;mIz9&quot;&gt;Даже если на странице сейчас один элемент — завтра может появиться второй.&lt;/li&gt;
    &lt;li id=&quot;7HiA&quot;&gt;&lt;code&gt;&amp;gt;AT&amp;gt;0&lt;/code&gt; означает: возьми первый подходящий элемент.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;5T2I&quot;&gt;&lt;strong&gt;2. Используй смысловые атрибуты&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;iWL5&quot;&gt;
    &lt;li id=&quot;EQ2y&quot;&gt;Ищи по &lt;code&gt;placeholder&lt;/code&gt;, &lt;code&gt;name&lt;/code&gt;, &lt;code&gt;type&lt;/code&gt;, &lt;code&gt;value&lt;/code&gt;, &lt;code&gt;title&lt;/code&gt;, &lt;code&gt;aria-label&lt;/code&gt;, если они содержат понятные и постоянные значения.&lt;br /&gt; Пример: &lt;code&gt;&amp;gt;MATCH&amp;gt;placeholder=&amp;quot;Email address&amp;quot;&amp;gt;AT&amp;gt;0 value=&amp;quot;submit&amp;quot;&amp;gt;AT&amp;gt;0 &lt;/code&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;wUaC&quot;&gt;&lt;strong&gt;3. Можно искать по тексту, но с осторожностью&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;AGNP&quot;&gt;
    &lt;li id=&quot;Zy0o&quot;&gt;Поиск по тексту (&lt;code&gt;&amp;gt;MATCH&amp;gt; Отправить&lt;/code&gt;) работает, но может сломаться при смене языка или дизайна.&lt;/li&gt;
    &lt;li id=&quot;UCMa&quot;&gt;Не злоупотребляй этим, если есть альтернативы.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;VCmD&quot;&gt;&lt;strong&gt;4. Избегай динамических значений&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;ilmM&quot;&gt;
    &lt;li id=&quot;sdvc&quot;&gt;Не используй &lt;code&gt;id&lt;/code&gt;, &lt;code&gt;class&lt;/code&gt;, &lt;code&gt;aria-*&lt;/code&gt;, если они выглядят как сгенерированные (например, &lt;code&gt;id=&amp;quot;:r1:-xyz123&amp;quot;&lt;/code&gt; или &lt;code&gt;class=&amp;quot;_root_ab123_4&amp;quot;&lt;/code&gt;).&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;BLHC&quot;&gt;&lt;strong&gt;5. Минимизируй длину MATCH&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;0WKP&quot;&gt;
    &lt;li id=&quot;1dXf&quot;&gt;Чем короче и точнее выражение — тем меньше шансов, что оно “сломается” при обновлении сайта.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;1TTt&quot;&gt;&lt;/p&gt;
  &lt;h2 id=&quot;2mR0&quot;&gt;А что насчёт XPath?&lt;/h2&gt;
  &lt;p id=&quot;NMKi&quot;&gt;XPath это ещё один способ находить элементы на странице. Он позволяет искать элементы по их &lt;strong&gt;положению в структуре DOM&lt;/strong&gt;, по атрибутам, тексту и даже логике вложенности.&lt;/p&gt;
  &lt;p id=&quot;MLDk&quot;&gt;Пример:&lt;/p&gt;
  &lt;pre id=&quot;RkDK&quot;&gt;&amp;gt;XPath&amp;gt; //button[@type=&amp;quot;submit&amp;quot;]
&lt;/pre&gt;
  &lt;p id=&quot;D63U&quot;&gt;Или:&lt;/p&gt;
  &lt;pre id=&quot;Dtja&quot;&gt;&amp;gt;XPath&amp;gt; //input[contains(@placeholder, &amp;quot;Email&amp;quot;)]
&lt;/pre&gt;
  &lt;hr /&gt;
  &lt;h3 id=&quot;Sach&quot;&gt;Что умеет XPath:&lt;/h3&gt;
  &lt;ul id=&quot;sJ1f&quot;&gt;
    &lt;li id=&quot;4BBH&quot;&gt;Искать элементы по частичному совпадению&lt;/li&gt;
    &lt;li id=&quot;KpHd&quot;&gt;Навигировать вверх и вниз по дереву элементов&lt;/li&gt;
  &lt;/ul&gt;
  &lt;hr /&gt;
  &lt;h3 id=&quot;x0Nf&quot;&gt;Но честно:&lt;/h3&gt;
  &lt;blockquote id=&quot;nmhU&quot;&gt;За 3 года работы в BAS мне &lt;strong&gt;никогда не понадобился XPath, не говоря уже про AT и None (не встречал ниразу в скриптах чужих даже)&lt;/strong&gt;&lt;br /&gt;Во всех проектах от простых до сложных всегда хватало &lt;strong&gt;MATCH и CSS&lt;/strong&gt;.&lt;/blockquote&gt;
  &lt;p id=&quot;mZzJ&quot;&gt;Я предпочитаю использовать самое простое. XPath требует времени на изучение, синтаксис у него специфичный, и если ты не работал с XML или HTML в ручную — он может показаться перегруженным. Если ты умеешь решать задачу с помощью MATCH или CSS - ПОЛНЫЙ ГАЗ&lt;strong&gt;!&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;4qdX&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;beWS&quot;&gt;Мой Телеграм канал - @baser_crypto&lt;/p&gt;
  &lt;p id=&quot;C8NT&quot;&gt;YouTube - youtube.com/@baser_crypto&lt;/p&gt;

</content></entry></feed>