2013-05-02 2 views
7

Все в заголовке!Определить каталог загрузки для седана хромидра с питоном

Есть ли способ определить каталог загрузки для selenium-chromedriver, используемый с python?

Несмотря на многочисленные исследования, я не нашел ничего убедительного ... Как новичок, я многое видел о «желаемых возможностях» или «вариантах» для Chromedriver, но ничто не разрешило мою проблему. .. (и я до сих пор не знаю, будет ли это!)

Чтобы объяснить немного больше моей проблемы: У меня есть много url для сканирования (200 000) и для каждого URL-файла для загрузки. Мне нужно создать таблицу с url, информацию, которую я сломал на ней, и имя файла, который я только что загрузил для каждой веб-страницы. С объемом, который я должен обработать, я создал потоки, которые открывают несколько экземпляров хромированного ребра, чтобы ускорить обработку. Проблема заключается в том, что каждый загруженный файл поступает в тот же каталог по умолчанию, и я больше не могу связать файл с url ... Итак, идея состоит в том, чтобы создать каталог загрузки для каждого потока, чтобы управлять им одним один.

Если у кого-то есть ответ на мой вопрос в заголовке ИЛИ обходной путь, чтобы определить загруженный файл и связать его с текущим URL-адресом, я буду благодарен!

+0

Вообще-то я хотел бы предложить вам не загружать вещи, используя хром, это, как правило, плохо продумано тест, который просто загружает все в статичной папку. Вы что-нибудь делаете с загруженными файлами? Почитайте об этом: http://ardesco.lazerycode.com/index.php/2012/07/how-to-download-files-with-selenium-and-why-you-shouldnt/, а затем этот http://www.blog.pythonlibrary.org/2012/06/07/python-101-how-to-download-a-file/ – Ardesco

+0

привет Привет и спасибо за ваш ответ. На самом деле я не использую Selenium для запуска тестов, но действительно для автоматизации массовых загрузок файла csv данных для последующей обработки. Я попытался изучить путь urllib2, но я встретил серьезные трудности для аутентификации на сайте ... (вероятно, потому, что я новичок Sunday-DIY и Selenium был золотым яйцом, когда я нашел его! ...) – matlabat

ответ

1

Для chromedriver1 создайте новый профиль и внутри этого профиля установите download.default_directory в нужное место и задайте этот профиль для хрома, используя chrome.profile. Пакет selenium-chromedriver должен иметь некоторые методы для создания новых профилей (по крайней мере, с рубином), так как им нужна специальная обработка.

Chromedriver2 не поддерживает настройку профиля. Вы можете установить с ним предпочтения. Если вы хотите установить каталог загрузки это, как вы это делаете:

prefs: { download: { default_directory: "/tmp" } } 

рубин селеном WebDriver не поддерживает эту функцию, тем не менее, вариант питон может сделать, однако.

1

Я столкнулся с той же проблемой. Пробовал много решений, найденных в Интернете, никто не помогал. Так что в конце концов я пришел к этому:

  • Launch хром с пустым пользовательскими данными-каталогом (в/папке TMP), чтобы хром инициализировать его
  • Выходом Chrome
  • ИЗМЕНЯЕТ по умолчанию/Preferences во вновь созданного пользователя -data-Dir, добавить эти поля в корневой объект (просто пример):

    "скачать": { " default_directory": "/tmp/tmpX7EADC.downloads", "directory_upgrade": правда }

  • Launch хром снова с тем же пользовательским данным-Dir

Теперь она работает просто отлично.

Еще один совет: если вы не знаете имя файла файла, которое будет загружено, создайте моментальный снимок (список файлов) каталога загрузки, затем загрузите файл и найдите его имя путем сравнения моментального снимка и текущего списка файлов в каталоге загрузки.

+0

, если вам нужен какой-то псевдо-код Python для проблемы, дайте мне знать. –

0

Пожалуйста, попробуйте следующий код ....

System.setProperty("webdriver.chrome.driver", "/path/to/chromedriver"); 
String downloadFilepath = "/path/to/download"; 
HashMap<String, Object> chromePrefs = new HashMap<String, Object>(); 
chromePrefs.put("profile.default_content_settings.popups", 0); 
chromePrefs.put("download.default_directory", downloadFilepath); 
ChromeOptions options = new ChromeOptions(); 
HashMap<String, Object> chromeOptionsMap = new HashMap<String, Object>(); 
options.setExperimentalOptions("prefs", chromePrefs); 
options.addArguments("--test-type"); 
DesiredCapabilities cap = DesiredCapabilities.chrome(); 
cap.setCapability(ChromeOptions.CAPABILITY, chromeOptionsMap); 
cap.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true); 
cap.setCapability(ChromeOptions.CAPABILITY, options); 
WebDriver driver = new ChromeDriver(cap); 
+1

'C#' ответ на вопрос 'Python'? – DeepSpace