Найти - Пользователи
Полная версия: selenium без открытия окна браузера и в несколько потоков
Начало » Python для экспертов » selenium без открытия окна браузера и в несколько потоков
1 2
d1ffuz0r
в питоновской версии библиотеки селениума нет некоторых методов которые ждут появления элемента, как в либе на 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
mrgloom
создание и убивание окна убрал, теперь всё норм и довольно быстро

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

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 — но это костыль

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

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


попозже выложу код, если надо.
odnochlen
Как по мне, стоило бы это делать легковесным клиентом.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB