2017-10-17 115 views
0

我想從網頁中枚舉所有超鏈接(包含要從中下載的文件),然後一個接一個地下載這些文件。點擊時的超鏈接需要填寫表格,我已經創建了一個類來完成相同的工作。在代碼運行期間,我收到「AttributeError:'元組'對象沒有'click'屬性。我在此附上代碼,任何建議糾正這一點將非常感激。Python Selenium Webdriver:枚舉超鏈接並下載文件

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

回答

1

請檢查您使用的枚舉,這是明顯錯誤的。 鑑於

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

,你現在可以簡單地在這個集合進行迭代,如:

for link in elem: 
    link.click() 

你並不需要所有的休息。

+0

謝謝澄清安德烈亞斯。雖然現在我在運行代碼時收到斷言錯誤,但是在將driver.title中包含「resources」之前,我確實檢查了頁面源代碼。我在這裏錯過了什麼嗎? – Cashi

+0

我只是評論了這一行,因爲我不確定你對assert的意圖是什麼。如果這是一項功能,請澄清您的意圖。 –

+0

嗨安德烈亞斯,其目的是找到並下載網頁中的所有XML鏈接。我已經更新了代碼,但面對CSS選擇器的問題https://stackoverflow.com/questions/46784644/python-selenium-css-selector-element-is-not-visible – Cashi