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

Я перебираю котировки биткойнов с сайта Coinsuper . Это страница JavaScript. Когда я впервые разрабатываю свой код для Windows, используя Python 3.7 , Selenium и Chromium , он хорошо работает.

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

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

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

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

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

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

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

Я думаю, что это возможно, потому что Coinsuper имеет некоторую стратегию противоскребания. Но меня также смущает, почему подобный код может работать в 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()

Ответы [ 2 ]

0 голосов
/ 23 мая 2019

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

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

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

Вот решение:

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

  2. Start Shadowsocks client на сервере:

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

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

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

enter image description here

0 голосов
/ 22 мая 2019

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

https://github.com/bonigarcia/webdrivermanager

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...