Я извлекаю котировки биткойнов из сети Коинсупер. Это javascript-страница. Когда я впервые разрабатываю свой код для Windows, используя Питон 3.7, Селен и Хром, он работает хорошо.
Я хочу развернуть этот код на своем сервере для непрерывного получения данных. Однако он не работает под Linux.
Я уверен, что мой код может работать, по крайней мере, на большинстве веб-сайтов, включая яблоко, Google, Байду, Сюэцю и т. д.
Для параметров веб-драйвера я пробовал:
Добавить заголовок, включая fake-useragent
Игнорировать SSL-сертификат
Отключить графический процессор
Это не имеет значения.
Я думаю, что это возможно, потому что Коинсупер имеет некоторую стратегию защиты от скрейпинга. Но меня также смущает, почему аналогичный код может работать в 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()
Спасибо, @bharatk! Я добавил веб-драйвер в путь. Он не показывает разницы в указании пути. Apple и Google по-прежнему могут возвращать обычный контент, а Коинсупер — нет.
веб-браузер в другой системе имеет другой заголовок User-Agent
. Таким образом, сервер может заблокировать доступ к некоторым системам. У вас есть проблемы с открытием этой страницы непосредственно в веб-браузере в Linux?
что означает Doesn't work
?
Я запускаю его с веб-драйвером Firefox в Linux Mint 19.1 (на основе Ubuntu 18.04), и он отображает page_source. Я не могу проверить правильность содержимого, но когда я запускаю его без --headless
, я вижу все в браузере.
Спасибо, @furas! Я только запускал свой сервер в командной строке. Я попытаюсь установить графический интерфейс и посмотреть, сможет ли веб-драйвер получить контент.
Если ваш сервер находится в облаке, возможно, coinsuper занес ваш IP-адрес в черный список за предыдущие злоупотребления или даже всю подсеть для вашего провайдера.
Я рекомендую вам использовать зависимость WebDriverManager:
https://github.com/bonigarcia/webdrivermanager
Используя WebDriverManager, вам не нужно было загружать драйверы или управлять ими в коде.
Я не думаю, что это решение проблемы. Это скорее хорошо для комментария, а не для ответа. Понизить.
это отличная библиотека, чувак, но здесь не применимо
Я тот, кто задает этот вопрос. Спасибо всем за помощь! Наконец, я решил эту проблему.
@furas показал, что мой код действительно может получать ответы от Коинсупер.
@Dalvenjia вдохновил меня на то, что это может быть вызвано черным списком IP-адресов, что наиболее вероятно для облачных серверов. И да, я использую облачный сервер.
Вот решение:
Запустите теневые носкисервер с моего домашнего IP-адреса или используйте любой имеющийся у вас прокси.
Запускаем теневые носкиклиент на сервере:
Добавьте еще один аргумент в ChromeDriver в скрипте Python:
chrome_options.add_argument('--proxy-server=socks5://127.0.0.1:xxxx')
Теперь я могу получить содержимое, минуя черный список IP-адресов.
Вы должны добавить путь к драйверу Chromium в
webdriver.Chrome("/usr/bin/chromedriver",options=chrome_options)
, где /USR/бен/хромдрайвер — это путь к драйверу.