Selenium не может получить содержимое веб-страницы в Linux, но хорошо работает в Windows для определенного веб-сайта.

Я извлекаю котировки биткойнов из сети Коинсупер. Это javascript-страница. Когда я впервые разрабатываю свой код для Windows, используя Питон 3.7, Селен и Хром, он работает хорошо.

Я хочу развернуть этот код на своем сервере для непрерывного получения данных. Однако он не работает под Linux.

Я уверен, что мой код может работать, по крайней мере, на большинстве веб-сайтов, включая яблоко, Google, Байду, Сюэцю и т. д.

  • Для системы ОС я пробовал Debian 9 и Ubuntu 18.04.
  • Для веб-драйвера я пробовал как Chrome, так и Firefox.
  • Для параметров веб-драйвера я пробовал:

    1. Добавить заголовок, включая fake-useragent

    2. Игнорировать SSL-сертификат

    3. Отключить графический процессор

Это не имеет значения.

Я думаю, что это возможно, потому что Коинсупер имеет некоторую стратегию защиты от скрейпинга. Но меня также смущает, почему аналогичный код может работать в Windows, но не в Linux. Существуют ли какие-либо различия, которые могут вызвать эту ситуацию?

Код:

from selenium import webdriver

chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')  # Only included in Linux version
chrome_options.add_argument('--no-sandbox')  # Only included in Linux version
driver = webdriver.Chrome(options=chrome_options)
driver.get('https://www.coinsuper.com/trade')
print(driver.page_source)
driver.quit()

Вы должны добавить путь к драйверу Chromium в webdriver.Chrome("/usr/bin/chromedriver",options=chrome_opti‌​ons), где /USR/бен/хромдрайвер — это путь к драйверу.

bharatk 22.05.2019 14:45

Спасибо, @bharatk! Я добавил веб-драйвер в путь. Он не показывает разницы в указании пути. Apple и Google по-прежнему могут возвращать обычный контент, а Коинсупер — нет.

W. Ding 22.05.2019 14:54

веб-браузер в другой системе имеет другой заголовок User-Agent. Таким образом, сервер может заблокировать доступ к некоторым системам. У вас есть проблемы с открытием этой страницы непосредственно в веб-браузере в Linux?

furas 22.05.2019 14:57

что означает Doesn't work?

Ardesco 22.05.2019 15:11

Я запускаю его с веб-драйвером Firefox в Linux Mint 19.1 (на основе Ubuntu 18.04), и он отображает page_source. Я не могу проверить правильность содержимого, но когда я запускаю его без --headless, я вижу все в браузере.

furas 22.05.2019 15:12

Спасибо, @furas! Я только запускал свой сервер в командной строке. Я попытаюсь установить графический интерфейс и посмотреть, сможет ли веб-драйвер получить контент.

W. Ding 22.05.2019 15:35

Если ваш сервер находится в облаке, возможно, coinsuper занес ваш IP-адрес в черный список за предыдущие злоупотребления или даже всю подсеть для вашего провайдера.

Dalvenjia 22.05.2019 22:34
3 метода стилизации элементов HTML
3 метода стилизации элементов HTML
Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно...
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
0
7
686
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Я рекомендую вам использовать зависимость WebDriverManager:

https://github.com/bonigarcia/webdrivermanager

Используя WebDriverManager, вам не нужно было загружать драйверы или управлять ими в коде.

Я не думаю, что это решение проблемы. Это скорее хорошо для комментария, а не для ответа. Понизить.

furas 22.05.2019 15:13

это отличная библиотека, чувак, но здесь не применимо

JaY KuMaR 14.12.2021 08:36
Ответ принят как подходящий

Я тот, кто задает этот вопрос. Спасибо всем за помощь! Наконец, я решил эту проблему.

  • @furas показал, что мой код действительно может получать ответы от Коинсупер.

  • @Dalvenjia вдохновил меня на то, что это может быть вызвано черным списком IP-адресов, что наиболее вероятно для облачных серверов. И да, я использую облачный сервер.

Вот решение:

  1. Запустите теневые носкисервер с моего домашнего IP-адреса или используйте любой имеющийся у вас прокси.

  2. Запускаем теневые носкиклиент на сервере:

  3. Добавьте еще один аргумент в ChromeDriver в скрипте Python:

chrome_options.add_argument('--proxy-server=socks5://127.0.0.1:xxxx')

Теперь я могу получить содержимое, минуя черный список IP-адресов.

enter image description here

Другие вопросы по теме