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
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
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-адресов.

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