2013-05-02 15 views
7

Wszystko jest w tytule!Zdefiniuj katalog pobierania selenu chromedriver z pytonem

Czy istnieje sposób zdefiniowania katalogu pobierania dla selen-chromedriver używanego z pythonem?

Pomimo wielu badań, nie znalazłem czegoś rozstrzygającego ... Jako początkujący widziałem wiele rzeczy o "pożądanych możliwościach" lub "opcjach" dla Chromedrivera, ale nic nie rozwiązało mojego problemu. .. (i wciąż nie wiem, czy to będzie!)

Aby wyjaśnić nieco więcej mojego problemu: Mam wiele adresów URL do skanowania (200 000) i dla każdego adresu URL plik do pobrania. Muszę utworzyć tabelę z adresem URL, informacje, które ja złapałem, ORAZ nazwę pliku, który właśnie pobrałem dla każdej strony. Z objętością, którą muszę wyleczyć, stworzyłem wątki, które otwierają wiele wystąpień chromedriver, aby przyspieszyć leczenie. Problem polega na tym, że każdy pobrany plik pojawia się w tym samym domyślnym katalogu i nie jestem w stanie połączyć pliku z adresem URL ... Chodzi o to, aby utworzyć katalog pobierania dla każdego wątku, aby móc nim zarządzać. jeden.

Jeśli ktoś ma odpowiedź na moje pytanie w tytule lub obejście problemu, aby zidentyfikować pobrany plik i połączyć go z bieżącym adresem URL, będę wdzięczny!

+0

Generalnie chciałbym zaproponować Ci nie pobierać rzeczy w Chrome, to zwykle źle przemyślane test, który po prostu pobiera wszystko w folderze statycznej. Czy robisz cokolwiek z pobranymi plikami? Czytać o tym: http://ardesco.lazerycode.com/index.php/2012/07/how-to-download-files-with-selenium-and-why-you-shouldnt/, a następnie ten http://www.blog.pythonlibrary.org/2012/06/07/python-101-how-to-download-a-file/ – Ardesco

+0

cześć Witam i dziękuję za odpowiedź. Tak naprawdę nie używam Selenium do uruchamiania testów, ale tak naprawdę do zautomatyzowania ogromnych pobrań pliku csv danych do obróbki końcowej. Próbowałem poznać sposób urllib2, ale spotkałem się z trudnymi problemami, aby uwierzytelnić się na stronie ... (prawdopodobnie dlatego, że jestem niedzielnym nowicjuszem, a Selen to gąska o złotym jajku, kiedy ją znalazłem! ...) – matlabat

Odpowiedz

1

Dla chromiedriver1 utwórz nowy profil, a wewnątrz tego profilu ustaw download.default_directory w żądanym miejscu i ustaw ten profil na chrome przy użyciu chrome.profile. Pakiet selenium-chromedriver powinien mieć kilka metod tworzenia nowych profili (przynajmniej w przypadku ruby), ponieważ wymagają one specjalnej obsługi.

Chromedriver2 nie obsługuje ustawiania profilu. Możesz z nim ustawić preferencje. Jeśli chcesz ustawić katalog Pobierz ten sposób można to zrobić:

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

Ruby selen-webdriver nie obsługuje tej funkcji jeszcze wariant pyton może jednak zrobić.

1

Ostatnio miałem do czynienia z tym samym problemem. Próbowałem wielu rozwiązań znalezionych w Internecie, nikt nie pomógł. Więc w końcu doszedłem do tego:

  • uruchamianie chrom z pustym użytkownika-data-dir (w katalogu/tmp), aby pozwolić chrom zainicjować to
  • Quit Chrome
  • modyfikowanie default/preferencje w nowo utworzonego użytkownika -data-dir, dodać te pola do obiektu głównego (tylko przykład):

    "pobieranie": { "default_directory": "/tmp/tmpX7EADC.downloads", "directory_upgrade": true}

  • Uruchom ponownie chrom z tej samej firmy-data-dir

Teraz działa dobrze.

Kolejna porada: Jeśli nie znasz nazwy pliku, który ma zostać pobrany, utwórz migawkę (listę plików) katalogu pobranych plików, a następnie pobierz plik i znajdź jego nazwę za pomocą migawki porównawczej i bieżącej listy pliki w katalogu pobierania.

+0

jeśli potrzebujesz jakiegoś pseudo-kodu Pythona dla problemu, daj mi znać. –

0

Spróbuj poniższy kod ....

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

Odpowiedź "C#" na pytanie "Python"? – DeepSpace