2017-10-17 27 views
0

웹 페이지에서 모든 하이퍼 링크 (다운로드 할 파일 포함)를 열거하고이어서이 파일을 차례로 다운로드하려고합니다. 하이퍼 링크를 클릭하면 동일한 양식을 완성하기 위해 클래스를 작성한 양식이 채워져 있어야합니다. "AttributeError : 'tuple'객체에 코드가 실행되는 동안 '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

Andreas를 명확히 해주셔서 감사합니다. 코드를 실행하는 동안 어설 션 오류가 발생했지만 driver.Title에 "resources"를 포함하기 전에 페이지 소스를 검사했습니다. 내가 여기서 뭔가를 놓치고 있니? – Cashi

+0

나는 그 주장에 당신의 의도가 무엇인지 확신 할 수 없었기 때문에 나는 단지 그 줄을 주석 처리했다. 이것이 기능이라면 귀하의 의도를 분명히하십시오. –

+0

안녕하세요 Andreas, 의도는 웹 페이지의 모든 XML 링크를 찾아서 다운로드하는 것입니다. 지금 코드를 업데이트했지만 CSS 선택기의 문제가 있습니다. https://stackoverflow.com/questions/46784644/python-selenium-css-selector-element-is-not-visible – Cashi