Genel kaynaktan (web sitesi) yapılan birden fazla indirme işlemi, Javascript tarafından tetiklenen “OK düğmesine tıklayın” nasıl atlanır?


1

Ortak bir kaynaktan birden fazla veri seti indirmeye çalışıyorum. Avrupa Birliği İşlem Günlüğü .

"Tahsis / Uygunluk" arama aracını kullanıyorum (soldaki mavi bölmede).

Oradan bir ülke seçmeli ve "ara" ya basmalıyım. Daha sonra çeşitli yıllara erişimim var (2010, 2011, 2012, vb ...). Dosyaları tüm ülkeler (28) ve önceki tüm yıllar için (2005'ten 2013'e kadar) indirmek istiyorum, yani en az 252 istek.

İndirme URL'sini doğrudan nasıl kullanabileceğimi anlamaya çalıştım. Son URL (bu örnekte, 2010 yılında Bulgaristan için), devamındaki .

Bu URL’den yapabileceklerim:

  • "& amp; installationAllowance = 35266538" parametresini çıkarın
  • "& amp; registryCodeLookup = Bulgaria" parametresini soyun
  • "& amp; periodYear = 2010" parametresini değiştirin (referans tarihini değiştirmek için)
  • "& amp; registryCode = BG" parametresini değiştirin (ülkeyi değiştirmek için).

Şu ana kadar tek sorunum, her bağlantının indirme sayfasından bir onay gerektirmesidir ("Tamam" düğmesine tıklayın).

Sayfanın kaynak kodunda, tetiklenen fonksiyonun şu olduğunu görüyorum:

<form name="export" method="POST" action="http://ec.europa.eu/environment/ets/export.do">

"Tamam" düğme kodu aşağıdaki gibidir:

<input type="submit" name="OK" value="Ok" class="FormButton" id="btnOK">

Sayfa kaynağında bir JavaScript bloğu da var.

Bu dosyaları toplu olarak nasıl indirebilirim? (Yılları ve ülkeleri bir RegEx ile değiştirip daha sonra Firefox için "DownThemAll" uzantısını kullanarak "dosyadan indirme" seçeneğiyle bir sürü bağlantı kurmayı düşünüyordum).

Yanıtlar:


1

Kesinlikle kullanmayı düşünürdüm ile python modül adı selenyum .

Tarayıcı işlemlerini kolayca otomatikleştirebilirsiniz (hatta kafasız PhantomJS ).

En basit örnek:

driver = webdriver.Firefox()
driver.get("http://www.python.org")
assert "Python" in driver.title
elem = driver.find_element_by_name("q")
elem.send_keys("pycon")
elem.send_keys(Keys.RETURN)
assert "No results found." not in driver.page_source
driver.close()

Yukarıdaki kod python.org web sayfasını açacak, elemanı bulun q, "pycon" yazıp enter tuşuna basın ve geri döndürülen sonuç olup olmadığını kontrol edin.

Gerçekleştirmek istediğiniz bazı işlem zincirlerini tanımlayabilirsiniz:

actions = ActionChains(driver)
actions.move_to_element(menu)
actions.click(hidden_submenu)
actions.perform()

Elbette tıklanması gereken "Tamam" düğmesini bulabilirsiniz:

button_ok = driver.find_element_by_id('button')

ve üzerine tıklayın:

button_ok.click()

Xpath'ler verilen elemanları aramak için de kullanılabilir: /html/body/button.

Bu çözümle ilgileniyorsanız incelemeyi düşünün belgeleme Çok iyi yazılmış ve kesinlikle son çözümü oluşturmanıza asla izin vermeyecek.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.