2017-10-17 100 views
1

我想找到所有的超鏈接在一個網頁上有一個XML下載鏈接,並在循環中下載它們。 點擊該超鏈接時會出現表單,需要填寫才能繼續下載。 我面對的問題,涉及到在網頁中該XML文件中的元素的可見性,但我收到以下錯誤:Python Selenium CSS選擇器:元素不可見

"selenium.common.exceptions.ElementNotInteractableException: Message: Element is not visible"

我在此連接的代碼,有什麼建議來糾正,這將是非常感激。

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() 

回答

0

您必須僅查找XML而不是所有的超鏈接。您的定位器//*[@href]正在查找所有HREF鏈接。使用下面的代碼

#locate all the links which have xml 
allelements = driver.find_elements_by_xpath("//a[text()='xml']") 

# Iterate all links one by one 
for element in allelements: 
    element.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(5) 
    FormPage().fill_form(data).submit() 

    #It opens the download link in new tab So below code again switch back to parent window itself 
    window_before = driver.window_handles[0] 
    driver.switch_to_window(window_before) 
+0

謝謝NarendraR的迴應。運行和第一次下載後,我面臨以下錯誤: selenium.common.exceptions.StaleElementReferenceException:消息:過時的元素引用:或者元素不再附加到DOM或頁面已被刷新 – Cashi

相關問題