PhantomJS возвращает пустую веб-страницу (python, Selenium)

Попытка экрана очистить веб-сайт без необходимости запуска фактического экземпляра браузера в сценарии python (используя Selenium). Я могу сделать это с помощью Chrome или Firefox – я пробовал это, и он работает, но я хочу использовать PhantomJS, так что он безголовый.

Код выглядит так:

import sys import traceback import time from selenium import webdriver from selenium.webdriver.common.keys import Keys from selenium.webdriver.common.desired_capabilities import DesiredCapabilities dcap = dict(DesiredCapabilities.PHANTOMJS) dcap["phantomjs.page.settings.userAgent"] = ( "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/53 " "(KHTML, like Gecko) Chrome/15.0.87" ) try: # Choose our browser browser = webdriver.PhantomJS(desired_capabilities=dcap) #browser = webdriver.PhantomJS() #browser = webdriver.Firefox() #browser = webdriver.Chrome(executable_path="/usr/local/bin/chromedriver") # Go to the login page browser.get("https://www.whatever.com") # For debug, see what we got back html_source = browser.page_source with open('out.html', 'w') as f: f.write(html_source) # PROCESS THE PAGE (code removed) except Exception, e: browser.save_screenshot('screenshot.png') traceback.print_exc(file=sys.stdout) finally: browser.close() 

Результат просто:

 <html><head></head><body></body></html> 

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

Что мне не хватает?

ОБНОВЛЕНО: я попытаюсь обновить приведенный ниже фрагмент до тех пор, пока он не будет работать. Что ниже, это то, что я сейчас пытаюсь.

 import sys import traceback import time import re from selenium import webdriver from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys from selenium.webdriver.common.desired_capabilities import DesiredCapabilities from selenium.webdriver.support import expected_conditions as EC dcap = dict(DesiredCapabilities.PHANTOMJS) dcap["phantomjs.page.settings.userAgent"] = ( "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/53 (KHTML, like Gecko) Chrome/15.0.87") try: # Set up our browser browser = webdriver.PhantomJS(desired_capabilities=dcap, service_args=['--ignore-ssl-errors=true']) #browser = webdriver.Chrome(executable_path="/usr/local/bin/chromedriver") # Go to the login page print "getting web page..." browser.get("https://www.website.com") # Need to wait for the page to load timeout = 10 print "waiting %s seconds..." % timeout wait = WebDriverWait(browser, timeout) element = wait.until(EC.element_to_be_clickable((By.ID,'the_id'))) print "done waiting. Response:" # Rest of code snipped. Fails as "wait" above. 

2 Solutions collect form web for “PhantomJS возвращает пустую веб-страницу (python, Selenium)”

Я столкнулся с одной и той же проблемой, и никакой код, который заставил водителя ждать, помогал.
Проблема заключается в шифровании SSL на веб-сайтах https, игнорируя их, будет делать трюк.

Вызовите драйвер PhantomJS следующим образом:

 driver = webdriver.PhantomJS(service_args=['--ignore-ssl-errors=true', '--ssl-protocol=TLSv1']) 

Это решило проблему для меня.

Вам нужно подождать, пока страница не появится . Обычно это делается с помощью Explicit Wait для ожидания присутствия или видимости ключевого элемента на странице . Например:

 from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC # ... browser.get("https://www.whatever.com") wait = WebDriverWait(driver, 10) wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "div.content"))) html_source = browser.page_source # ... 

Здесь мы подождем до 10 секунд, чтобы элемент div с class="content" стал видимым до получения источника страницы.


Кроме того, вам может потребоваться игнорировать ошибки SSL :

 browser = webdriver.PhantomJS(desired_capabilities=dcap, service_args=['--ignore-ssl-errors=true']) 

Хотя, я уверен, что это связано с проблемами перенаправления в PhantomJS . В phantomjs есть открытый билет:

  • PhantomJS не выполняет некоторые переадресации
  • Как скрыть окно консоли Chromedriver?
  • python selenium - Элемент в настоящее время не взаимодействует и не может быть обработан
  • Получение Chrome для запуска через Selenium
  • Render HTTP Response (HTML-контент) в selenium webdriver (браузер)
  • Отключение регистрации в Selenium (из Python)
  • httplib.BadStatusLine: '' на Linux, но не Mac
  • Как я могу сделать Selenium щелчком по переменному числу «следующих» кнопок?
  • Переключить окно на Selenium
  • Сделайте съемку страницы с помощью веб-драйвера Selenium
  • Ошибка Selenium «Элемент больше не привязан к DOM» при очистке данных
  • Профиль веб-драйвера Selenium Firefox - отключить окна всплывающих окон и предупреждений
  •  
    Interesting Posts for Van-Lav

    Как сгладить список, чтобы вернуть новый список со всеми элементами?

    Поделитесь одним и тем же модулем

    Форматирование строки Psycopg2 с именами переменных для создания типа

    Как заставить print () переопределить работу «глобально»,

    Локальный сервер дает неправильные файлы. Возможно ли, что я запускаю 2 сервера python?

    Обнаруживать, если изображение имеет границу, программно (возвращать логическое значение)

    Переформатирование скребкового селенового стола

    Частичные обновления через PATCH: как анализировать данные JSON для обновлений SQL?

    Почему качество Tkinter намного хуже ухудшается на окнах?

    Что такое быстрый (нециклический) способ применения dict к ndarray (что означает использование элементов в качестве ключей и замена значений)

    Добавление 2 кадров данных в pandon pandas

    Создание неориентированных графов в Python

    Как иметь один и тот же текст в двух ссылках с реструктурированным текстом?

    Почему в этом случае функция генератора работает в два раза быстрее?

    Подождите, пока stdout на Popen

    Python - лучший язык программирования в мире.