Ответы пользователя по тегу Node.js
  • Selenium nodejs android и парсинг?

    @formasters777 Автор вопроса
    Пробовал через термукс proot-alpine запускать репозиторий "puppeteer on termux", там было две проблемы /root/puppeteer-on-termux/node_modules/puppeteer-core/lib/cjs/puppeteer/common/assert.js:26:15
    или unsupported device: android
    но т.к. версии nodejs в термукс понизить нельзя, как я прочитал, нужно хранить в архиве старые версии и в них брать уже скомпилированные файлы или собирать пакет самому,
    возможно этот репозиторий и заработал бы, если не версия nodejs ведь ему уже 3 или 4 года.
    В принципе есть ещё другие варианты это selenium, selendroid, appium, nightwatchjs, но их нужно проверять.
    Да, вероятность запуска chromium-driver или гекко драйвера думаю больше,
    но тут немного не понятно, например, если устанавливать дистрибутив через линуксДеплой, насколько понимаю, это называется сhroot контейнер, всё сведётся к банальному перебору вариантов? Если брать Alpine, там есть выбор между armv7, armhf, aarch64, x86, x86_64.
    Из тех вопросов, что я задавал в интернете, мне говорили если у тебя есть рут, то можешь использовать chroot т.к. термукс имеет другую иерархию папок и все его библиотеки перекомпилированы.

    Я использую базовую настройку из библиотеки селениум, хотя я видел, что можно добавлять в опции , например const browser = await puppeteer.launch({headless: true, args:['--no-sandbox']});
    или
    chrome_options = webdriver.ChromeOptions()
    chrome_options.add_argument("--headless")
    chrome_options.add_argument("--no-sandbox")
    chrome_options.add_argument("--disable-gpu")
    driver = webdriver.Chrome(service = ser, options=chrome_options)
    driver.get(url)


    const { Builder, By, Key, until } = require('..')
    const { Options } = require('../chrome');
    
    (async function () {
      let driver
      try {
        driver = await new Builder()
          .forBrowser('chrome')
          .setChromeOptions(new Options().androidChrome())
          .build()
        await driver.get('http://www.google.com/ncr')
        await driver.findElement(By.name('q')).sendKeys('webdriver', Key.RETURN)
        await driver.wait(until.titleIs('webdriver - Google Search'), 1000)
      } finally {
        ;(await driver) && driver.quit()
      }
    })().then(
      (_) => console.log('SUCCESS'),
      (err) => console.error('ERROR: ' + err)
    )
    Ответ написан
    Комментировать
  • Применение объекта req.query на сервере node js?

    @formasters777 Автор вопроса
    А какой смысл вообще делать систему query в url строке,
    не могу знать, как сайты использовали эту систему в каком-нибудь 2010,
    но в React, можно просто сделать Route path="/shop" и на этой странице добавить кнопки фильтров,
    при клике срабатывает fetch с соответствующим req.query или req.params,
    сервер читает это, фильтр срабатывает и отправляет ответ,
    но url браузера при этом стоит и не шевелится.
    Но в некоторых видео можно увидеть, как в Postman и др. софте,
    делают запрос к серверу с query?category=followers, сервер читая эту строку отвечает данными базы и выдаёт список подписчиков.
    1. Это связано с ботами поисковиков, которые просматривают сайт?
    2. Для экономии роутов или линков на страницах?
    3. Для динамического формирования линка?
    4. Для того, чтобы просто манипулировать этими ключевыми словами для создания ссылок на кнопки поиска, фильтрации и т.п. , и при этом не использовать на клиенте fetch, ajax ?

    Для чего на клиенте в React и других фреймвёрках, в поисковой строке показывать https://mainsite.com/shop/sort?furniture=chairs - для визуального контроля, это визуальная абстракция?
    Ответ написан
    Комментировать
  • Парсинг динамического сайта JavaScript?

    @formasters777
    Тут есть много факторов,
    если сайт медленно даёт тебе ответ, то:
    -скорость твоего соединения? 3G, 4G, кабель 20Мб/с;
    -можно взять вместо твоего клиента https, например axios или fetch;
    -может быть так, что данные на сайте появятся только через 10сек. после события load, т.к. это просто запрограммировано на сайте так;
    -можешь попробовать безголовый способ типа Puppeteer;
    -в твоём коде вижу есть setTimeout( okey, 5000), но лучше возможно поменять условие на ожидание промиса?, пока данные не придут в промис, а туда придёт или resolve или reject, и ты увидишь в ответе там что-то.
    -если у тебя много запросов, к разным сайтам, можешь подумать о методах промиса .all() или allSettled().
    Ответ написан
    Комментировать