Ответы пользователя по тегу Парсинг
  • 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)
    )
    Ответ написан
    Комментировать
  • Парсинг динамического сайта JavaScript?

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