Je veux trouver tous les hyperliens dans une page Web qui a un lien de téléchargement xml et les télécharger en boucle. Il y a un formulaire qui apparaît lorsque le lien hypertexte est cliqué, et doit être rempli pour continuer le téléchargement. Je suis face à des problèmes dans la visibilité des éléments liés à ces fichiers xml dans la page Web, mais je reçois l'erreur suivante:Python Selenium CSS Selector: L'élément n'est pas visible
"selenium.common.exceptions.ElementNotInteractableException: Message: Element is not visible"
Je suis joint à la présente le code, des suggestions pour corriger ce sera très appréciée.
import os
import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
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)
m = 'xml'
driver.get('https://data.gov.in/catalog/variety-wise-daily-market-prices-data-cauliflower')
wait = WebDriverWait(driver, 10)
elem = driver.find_element_by_xpath("//*[@href]")
elem.send_keys("xml")
elem.send_keys(Keys.RETURN)
wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, ".list-recent-events li")))
assert m in driver.page_source
for link in elem:
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()
Merci NarendraR pour la réponse. Les exécutions et après le 1er téléchargement je fais face à l'erreur suivante: selenium.common.exceptions.StaleElementReferenceException: Message: La référence d'élément de stale: soit l'élément n'est plus attaché à le DOM ou la page a été rafraîchie – Cashi