Форум сайта python.su
в питоновской версии библиотеки селениума нет некоторых методов которые ждут появления элемента, как в либе на java. приходилось писать костыль который по таймауту искал элемент, так же гугли атрибут implicitly_wait.
каждый раз открывается/закрывается вероятно из за того, что начинаешь сессию селениума в setUp, перенеси в setUpClass, будет одно окно на весь набор тестов.
спрятать всё это дело можно, запуская тесты в xvfb. в связке с jenkins у меня выглядит это примерно так
xvfb-run –auto-servernum bash build.shзанимался распаралеливанием, но до конца не довёл. вот пара наработок
Отредактировано d1ffuz0r (Авг. 10, 2012 11:51:51)
Офлайн
создание и убивание окна убрал, теперь всё норм и довольно быстро
использую такую простую функцию
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”}'
Офлайн
xvfb-run — но это костыль
Офлайн
всё вроде заработало, единственное не очень уж быстро, наверно надо всё таки доделать в несколько потоков.
но осталось несколько проблем.
1.После сохранения ~1.5к фотографий скрипт по какой то причине зависает, запускал через PyCharm, ошибок никаких не выдало, просто на очередной фотографии окно фаерфокса встало и всё, причем все функции которые стараются что то получить у меня завёрнуты в try.
Возможно это со стороны сервера проблема, т.е. какую то картинку он отдаёт бесконечно долго.
И тут возникает вопрос, как сделать так, чтобы после какого то времени ожидания мы делали реконнект на картинку и пробовали опять несколько раз, если ничего не получается, то пропускали?
Я так понимаю, что это полезно и в случае использования прокси, ведь они не долго живут и могут отвалится по среди загрузки картинки, или это уже другой случай?
2.Почему то при работе скрипта отъедается место на диске С, предполагаю, что это или IDE что то пишет(что мало вероятно) или фаерфокс что то кэширует(что более вероятно) можно через селениум это как то отключить?
попозже выложу код, если надо.
Офлайн
Как по мне, стоило бы это делать легковесным клиентом.
Офлайн