2013-08-07 6 views
0

Я использую веб-редактор Selenium (на Python) для автоматизации загрузки тысяч файлов. Я хочу, чтобы файлы сохранялись в разных папках. Следующий код работает, но он требует отказа от курения и повторного запуска WebDriver несколько раз, что замедляет процесс:несколько папок загрузки с использованием Selenium Webdriver?

some_list = ["item1", "item2", "item3"] # over 300 items on the actual code 
for item in some_list: 
    download_folder = "/Users/myusername/Desktop/" + item 
    os.makedirs(download_folder) 
    fp = webdriver.FirefoxProfile() 
    fp.set_preference("browser.download.folderList", 2) 
    fp.set_preference("browser.download.manager.showWhenStarting", False) 
    fp.set_preference("browser.download.dir", download_folder) 
    fp.set_preference("browser.helperApps.neverAsk.saveToDisk", "text/plain") 
    browser = webdriver.Firefox(firefox_profile = fp) 

    # a bunch of code that accesses the site and downloads the files 

    browser.close() 
    browser.quit() 

Таким образом, на каждой итерации я должен выйти из WebDriver и повторно запустить его, который довольно неэффективно. Есть лучший способ сделать это? По-видимому, мы не можем изменить профиль Firefox после создания webdriver (см. this и this предыдущих вопросов), но, возможно, есть какая-то альтернатива, которой я не хватает?

(Mac OS X 10.6.8, Python 2.7.5, 2.2.0 Селен)

+0

Будет ли это работать, чтобы перемещать файлы с использованием простой старой Java? –

+0

Хмм, я не пробовал - я новичок в программировании, и я знаю только Python. – Parzival

ответ

1

Нет, я не думаю, что вы можете сделать это.

Вариант один: указать различные каталоги по умолчанию для одного FirefoxProfile

Вы не можете. На мой взгляд, это проблема с Firefox, а не с Selenium. Однако это ограничение Firefox выглядит для меня правильным. browser.download.dir - это пункт назначения для загрузки по умолчанию, если он позволяет несколько каталогов, то это не «по умолчанию».

Вариант два: переключить несколько FirefoxProfile например один драйвер

Если не делать это в Firefox, FirefoxProfile может быть переключен на тот же экземпляр драйвера? Насколько я знаю, ответ - нет. (Вы уже сделали некоторые исследования по этому вопросу)

Вариант три: использовать обычный, не Selenium способ сделать загрузку

Если вы хотите, чтобы избежать использования этой автоматической загрузки подход и сделать это обычным способом (например, Auto-it и т. д.), тогда он относится к категории "How To Download Files With Selenium And Why You Shouldn’t". Но в этом случае ваш код может быть упрощен.

some_list = ["item1", "item2", "item3"] # over 300 items on the actual code 
for item in some_list: 
    download_folder = "/Users/myusername/Desktop/" + item 
    some_way_magically_do_the_downloading(download_folder) 
+0

Спасибо. Я попытаюсь изучить некоторые Java, а затем посмотреть, могу ли я понять код в «Как загрузить ...» и как я могу перевести его на Python. – Parzival

Смежные вопросы