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 не выполняет некоторые переадресации
  • ImportError: невозможно импортировать имя Ошибка развертывания приложения Google Popen
  • Получить версию браузера с помощью selenium webdriver
  • Необходимо отказаться от таблицы, загружаемой через ajax с использованием python (selenium)
  • Selenium + firefox: пустые аргументы execute_script
  • Перенаправление переноса с PhantomJS + Selenium
  • Python selenium rc create_cookie
  • Не удается отправить ключи на сайт с Selenium Python на Centos в Firefox
  • Неисправность нажатием кнопки для следующей страницы
  • Python - лучший язык программирования в мире.