Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » Selenium, как послабить driver.get() (на Python)

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

fuflon4ik

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Прошу помощи.
Задача - снять "строгач" с driver.get(), чтоб отдавал не дожидаясь полной загрузки страницы, а по ходу частично подгруженой. Нашел рецепт. Нужно переложить это на Python. Не могу одолеть это дело.

Код:
 
    DesiredCapabilities capabilities = new DesiredCapabilities();
    capabilities.setCapability(CapabilityType.PAGE_LOAD_STRATEGY, "eager");
    WebDriver driver = new FirefoxDriver(capabilities);
    WebDriverWait wait = new WebDriverWait(driver, 10);
 

 
пробовал так:

Код:
 
    from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
 
    capabilities = DesiredCapabilities.CHROME()
    capabilities.setCapability(CapabilityType.PAGE_LOAD_STRATEGY, "eager")
    driver = webdriver.Chrome('chromedriver', capabilities)
 

 
получаю:

Код:
 
capabilities = DesiredCapabilities.CHROME()
TypeError: 'dict' object is not callable
 

 
Помогите пожалуйста
 

Всего записей: 61 | Зарегистр. 06-03-2013 | Отправлено: 21:05 10-12-2016 | Исправлено: fuflon4ik, 21:07 10-12-2016
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
fuflon4ik

Цитата:
TypeError: 'dict' object is not callable  

.CHROME не является функцией, что очевидно.
 
скорее уж  
capabilities = DesiredCapabilities.CHROME.copy()  
вернет массив

Всего записей: 15093 | Зарегистр. 20-09-2014 | Отправлено: 22:33 10-12-2016
fuflon4ik

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii, спасобо
Теперь ругается на следущую строку:

Код:
 
capabilities.setCapability(CapabilityType.PAGE_LOAD_STRATEGY, "eager")
AttributeError: 'dict' object has no attribute 'setCapability'
 


Всего записей: 61 | Зарегистр. 06-03-2013 | Отправлено: 00:18 11-12-2016
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
fuflon4ik
я же написал

Цитата:
вернет массив

у него нет функции
Цитата:
setCapability

 
Вариант через движок Firefoxа
http://stackoverflow.com/questions/32276654/setting-page-load-timeout-in-selenium-python-binding
http://stackoverflow.com/questions/25844586/python-selenium-can-click-element-directly-when-it-was-present-no-need-waiting
 
через массив же смотрите как называется нужный вам элемент, меняете значение, инициализируете вебдрайвер с этими параметрами

Код:
desired_capabilities = DesiredCapabilities.Chrome
desired_capabilities['PAGE_LOAD_STRATEGY'] = 'eager'
driver = webdriver.Chrome(capabilities=desired_capabilities)

это навскидку, не проверял

Всего записей: 15093 | Зарегистр. 20-09-2014 | Отправлено: 00:59 11-12-2016 | Исправлено: Mavrikii, 01:09 11-12-2016
fuflon4ik

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Спасибо. По Firefox исчерпывающе.
По хрому:

Код:
 
'type' object does not support item assignment
 
 
Тут функция to_copabilities:  
selenium/py/selenium/webdriver/chrome/options.py

Ключ взял тут
 
Пробую

Код:
 
    chrome_options = Options()
    chrome_options.to_copabilities['pageLoadStrategy'] = 'eager'
    driver = webdriver.Chrome(chrome_options=chrome_options)

Вот

Код:
'Options' object has no attribute 'to_copabilities'

 

 
dir(Options)

Код:
['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'add_argument', 'add_encoded_extension', 'add_experimental_option', 'add_extension', 'arguments', 'binary_location', 'debugger_address', 'experimental_options', 'extensions', 'to_capabilities']
 

 

 
Ещё вот это нашел. page_load_strategy.cc

Всего записей: 61 | Зарегистр. 06-03-2013 | Отправлено: 12:19 11-12-2016 | Исправлено: fuflon4ik, 12:24 11-12-2016
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
fuflon4ik
 

Цитата:
'Options' object has no attribute 'to_copabilities'

это функция
 
вот не хочется мне ставить этот селениум и смотреть вживую что и как.
 

Цитата:
'type' object does not support item assignment  

значит не массив, ну посмотрите что там и как.
 
и сдается мне, что в явном виде оно есть не у каждого браузера.. пример для Edge

Код:
class Options(object):
 
    def __init__(self):
        self._page_load_strategy = "normal"
 
    @property
    def page_load_strategy(self):
        return self._page_load_strategy
 
    @page_load_strategy.setter
    def page_load_strategy(self, value):
        if value not in ['normal', 'eager', 'none']:
            raise ValueError("Page Load Strategy should be 'normal', 'eager' or 'none'.")
        self._page_load_strategy = value
 
    def to_capabilities(self):
        """
            Creates a capabilities with all the options that have been set and
 
            returns a dictionary with everything
        """
        edge = DesiredCapabilities.EDGE.copy()
        edge['pageLoadStrategy'] = self._page_load_strategy
 
        return edge

 
тут видно, как задается. сделайте .copy, как я первоначально и писал
 

Код:
dcapabilities = DesiredCapabilities.Chrome.copy()
dcapabilities['pageLoadStrategy'] = 'eager'  
driver = webdriver.Chrome(desired_capabilities=dcapabilities)

 
но в движке хрома смущает одна вещь

Цитата:
        :Args:
         - executable_path - path to the executable. If the default is used it assumes the executable is in the $PATH
         - port - port you would like the service to run, if left as 0, a free port will be found.
        - desired_capabilities: Dictionary object with non-browser specific
           capabilities only, such as "proxy" or "loggingPref".

         - chrome_options: this takes an instance of ChromeOptions

непонятно относится ли к этому стратегия загрузки страницы, так что может и не сработать

Всего записей: 15093 | Зарегистр. 20-09-2014 | Отправлено: 07:49 12-12-2016 | Исправлено: Mavrikii, 07:51 12-12-2016
fuflon4ik

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
У Хрома свои решения. Попробую побороть, нет перейду на Firefox.
Ну и  driver.set_page_load_timeout() тоже вариант
Mavrikii, спасибо Вам за помощь
Почему-то долго не было доступа к сайту.

Всего записей: 61 | Зарегистр. 06-03-2013 | Отправлено: 11:07 15-12-2016
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Интернет » Web-программирование » Selenium, как послабить driver.get() (на Python)


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru