2017-10-17 19 views
0

J'essaie d'énumérer tous les hyperliens (avec des fichiers à télécharger) à partir d'une page Web, puis de télécharger ces fichiers les uns après les autres. Les liens hypertexte lorsqu'ils sont cliqués nécessitent un formulaire à remplir pour lequel j'ai créé une classe pour compléter le même. Je reçois "AttributeError: l'objet 'tuple' n'a pas d'attribut 'click'" pendant l'exécution du code. J'ai joint le code, toute suggestion pour rectifier cela sera très appréciée.Python Selenium Webdriver: Énumérer les hyperliens et télécharger les fichiers

import os 
import time 
from selenium import webdriver 
from selenium.webdriver.common.keys import Keys 

fp = webdriver.FirefoxProfile() 

fp.set_preference("browser.download.folderList", 2) 
fp.set_preference("browser.download.manager.showWhenStarting", False) 
fp.set_preference("browser.download.dir", "F:\Projects\Poli_Map\DatG_Py_Dat") 
fp.set_preference("browser.helperApps.neverAsk.saveToDisk", "text/xml") 

driver = webdriver.Firefox(firefox_profile=fp) 
driver.get('https://data.gov.in/catalog/variety-wise-daily-market-prices-data-cauliflower') 

assert "resources" in driver.title 
continue_link = driver.find_element_by_tag_name('a') 
elem = driver.find_elements_by_xpath("//*[@href]") 
z = elem 

for links in enumerate(z): 
    driver.implicitly_wait(4) 
    for link in enumerate(links): 
     link.click() 


     class FormPage(object): 
      def fill_form(self, data): 
       driver.execute_script("document.getElementById('edit-download-reasons-non-commercial').click()") 
       driver.execute_script("document.getElementById('edit-reasons-d-rd').click()") 
       driver.find_element_by_xpath('//input[@name = "name_d"]').send_keys(data['name_d']) 
       driver.find_element_by_xpath('//input[@name = "mail_d"]').send_keys(data['mail_d']) 
       return self 

      def submit(self): 
       driver.execute_script("document.getElementById('edit-submit').click()") 


     data = { 
      'name_d': 'xyz', 
      'mail_d': '[email protected]', 
     } 

     time.sleep(3) 
     FormPage().fill_form(data).submit() 

Répondre

1

Veuillez vérifier votre utilisation d'énumération, ce qui est tout à fait faux. Compte tenu

elem = driver.find_elements_by_xpath("//*[@href]") 

vous pouvez simplement itérer sur cette collection, tels que:

for link in elem: 
    link.click() 

Tout le reste, vous n'avez pas besoin.

+0

Merci d'avoir clarifié Andreas. Bien que maintenant je reçois une erreur d'assertion lors de l'exécution du code, j'ai inspecté la source de la page avant d'inclure les "ressources" dans driver.title. Est-ce que je rate quelque chose ici? – Cashi

+0

J'ai simplement commenté cette ligne, car je n'étais pas sûr de ce que votre intention avec l'affirmation était. S'il vous plaît clarifier votre intention si c'est une caractéristique. –

+0

Bonjour Andreas, L'objectif est de localiser et télécharger tous les liens xml dans la page Web. J'ai mis à jour le code maintenant, mais je rencontre un problème avec le sélecteur CSS https://stackoverflow.com/questions/46784644/python-selenium-css-selector-element-is-not-visible – Cashi