Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 10, 2012 11:48:33

d1ffuz0r
От: Moscow
Зарегистрирован: 2011-03-25
Сообщения: 127
Репутация: +  5  -
Профиль   Отправить e-mail  

selenium без открытия окна браузера и в несколько потоков

в питоновской версии библиотеки селениума нет некоторых методов которые ждут появления элемента, как в либе на java. приходилось писать костыль который по таймауту искал элемент, так же гугли атрибут implicitly_wait.
каждый раз открывается/закрывается вероятно из за того, что начинаешь сессию селениума в setUp, перенеси в setUpClass, будет одно окно на весь набор тестов.
спрятать всё это дело можно, запуская тесты в xvfb. в связке с jenkins у меня выглядит это примерно так

xvfb-run –auto-servernum bash build.sh
занимался распаралеливанием, но до конца не довёл. вот пара наработок
https://github.com/d1ffuz0r/python-parallel-wd
https://github.com/d1ffuz0r/selenium-webdrivers-pool

Отредактировано d1ffuz0r (Авг. 10, 2012 11:51:51)

Офлайн

#2 Авг. 12, 2012 17:56:37

mrgloom
От:
Зарегистрирован: 2010-07-22
Сообщения: 93
Репутация: +  0  -
Профиль   Отправить e-mail  

selenium без открытия окна браузера и в несколько потоков

создание и убивание окна убрал, теперь всё норм и довольно быстро

использую такую простую функцию

driver = webdriver.Firefox()
def get_url_selenium(in_url):
    #driver.set_window_size(0,0)#если поставить размера 0, то не работает 
    driver.implicitly_wait(1)# тут непонятно какое число надо ставить, хотелось бы просто дожидаться загрузки окна
    driver.get(in_url)
    driver.find_element_by_link_text("Загрузить оригинал на диск").click()
    driver.switch_to_window(driver.window_handles[1])
    url= driver.current_url
    driver.close()
    driver.switch_to_window(driver.window_handles[0])
    return url

но проблема в том, что почему то иногда всё стопорится
в последний раз например написало
line 53, in get_url_selenium
driver.find_element_by_link_text(“Загрузить оригинал на диск”).click()
File “C:\Python27\lib\site-packages\selenium-2.24.0-py2.7.egg\selenium\webdriver\remote\webdriver.py”, line 236, in find_element_by_link_text
return self.find_element(by=By.LINK_TEXT, value=link_text)
File “C:\Python27\lib\site-packages\selenium-2.24.0-py2.7.egg\selenium\webdriver\remote\webdriver.py”, line 667, in find_element
{'using': by, ‘value’: value})
File “C:\Python27\lib\site-packages\selenium-2.24.0-py2.7.egg\selenium\webdriver\remote\webdriver.py”, line 155, in execute
self.error_handler.check_response(response)
File “C:\Python27\lib\site-packages\selenium-2.24.0-py2.7.egg\selenium\webdriver\remote\errorhandler.py”, line 147, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: u'Unable to locate element: {“method”:“link text”,“selector”:“\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u043d\u0430 \u0434\u0438\u0441\u043a”}'

я так понимаю не нашло кнопки “Загрузить оригинал на диск”, возможно картинка не загрузилась?



и опять же остается проблема как выяснить дату когда была загружена картинка?



___________________________________________________________________________________________
http://www.lfd.uci.edu/~gohlke/pythonlibs/
https://bitbucket.org/pypy/compatibility/wiki/Home

Офлайн

#3 Авг. 12, 2012 19:24:35

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

selenium без открытия окна браузера и в несколько потоков

xvfb-run — но это костыль



Офлайн

#4 Авг. 17, 2012 09:15:41

mrgloom
От:
Зарегистрирован: 2010-07-22
Сообщения: 93
Репутация: +  0  -
Профиль   Отправить e-mail  

selenium без открытия окна браузера и в несколько потоков

всё вроде заработало, единственное не очень уж быстро, наверно надо всё таки доделать в несколько потоков.

но осталось несколько проблем.
1.После сохранения ~1.5к фотографий скрипт по какой то причине зависает, запускал через PyCharm, ошибок никаких не выдало, просто на очередной фотографии окно фаерфокса встало и всё, причем все функции которые стараются что то получить у меня завёрнуты в try.
Возможно это со стороны сервера проблема, т.е. какую то картинку он отдаёт бесконечно долго.
И тут возникает вопрос, как сделать так, чтобы после какого то времени ожидания мы делали реконнект на картинку и пробовали опять несколько раз, если ничего не получается, то пропускали?
Я так понимаю, что это полезно и в случае использования прокси, ведь они не долго живут и могут отвалится по среди загрузки картинки, или это уже другой случай?
2.Почему то при работе скрипта отъедается место на диске С, предполагаю, что это или IDE что то пишет(что мало вероятно) или фаерфокс что то кэширует(что более вероятно) можно через селениум это как то отключить?


попозже выложу код, если надо.



___________________________________________________________________________________________
http://www.lfd.uci.edu/~gohlke/pythonlibs/
https://bitbucket.org/pypy/compatibility/wiki/Home

Офлайн

#5 Авг. 17, 2012 12:56:25

odnochlen
Зарегистрирован: 2012-06-28
Сообщения: 794
Репутация: +  14  -
Профиль   Отправить e-mail  

selenium без открытия окна браузера и в несколько потоков

Как по мне, стоило бы это делать легковесным клиентом.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version