Задать вопрос
@formasters777

Selenium nodejs android и парсинг?

Все примеры, что я просматривал, selenium-webdriver, puppeteer и др. работают на пк и node js, всё открывается, вкладки создаются и закрываются, инпуты заполняются и т.д.
Но, при запуске подобного проекта или сервера на экспресс на android телефоне,
нет возможности получить доступ к webdriver (chromedriver).
Из всех рекомендаций, что я нашёл, это установка proot или chroot на базе termux с другим дистрибутивом Linux.
Почему в данном случае, при установке другого дистрибутива Linux в termux, всё должно работать, и в питон версии скриптов, и в версиях для nodejs.
т.к. termux это не чистый дистрибутив Linux со своими перекомпилированными библиотеками ?
  • Вопрос задан
  • 137 просмотров
Подписаться 1 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 2
3vi1_0n3
@3vi1_0n3
Есть некоторая вероятность, что пакеты, которые работают с chromedriver, используют нативные бинарники, которые тянут сами (во время установки пакета, например). Не для всего эти бинарники есть под не-Интел архитектуры.
Например, локальный запуск chromedriver'а может не сработать, потому что нет chromedriver'а под архитектуру вашего телефона. Под нее в теории может быть chromium-driver (который делает ровно то же самое), но не факт, что он есть для termux в принципе. Для других linux-дистрибутивов он может быть скомпилирован майнтейнерами дистрибутива.
Тут может быть более одной проблемы, недостаточно информации, чтобы сказать точнее. А именно: что используется в скриптах в качестве эндпоинта для селениума, локальный URL или удаленный, какие именно пакеты ставятся для работы с Selenium, тянут ли они свой бинарь для вебдрайвера и так далее.
Ответ написан
Комментировать
@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)
)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы