Selenium WebDriver를 Python으로 움직일 때 파일 선택의 send_keys로 고정 [PhantomJS]

결론



(적어도)input 태그의 displaynone이면 파일을 성공적으로 설정할 수 없습니다.

그러므로 파일을 지정하기 전에 style을 엉망으로 가시화해 주면 좋다.
driver.execute_script("document.getElementsByName('datafile')[0].style.display = '';")

검증 환경


  • Linux (검색하면 Windows 환경이 자주 나옵니다)
  • Python 2.7.5
  • selenium (2.53.6)
  • phantomjs 2.1.1

  • 3계가 아닌가 Headless Chrome이 아니냐는 상관하지 마세요.

    검증 사이트는
    <INPUT type="file"> - HTML 태그 참조
    input 를 사용하게 합니다.

    코드



    성공하는 사람
    from selenium import webdriver
    from selenium.common.exceptions import TimeoutException
    
    if __name__ == '__main__':
        try:
            driver = webdriver.PhantomJS()
            driver.get('http://www.htmq.com/html/input_file.shtml')
            elm = driver.find_element_by_name("datafile")
            print('get')
            elm.send_keys('./test.jpg')
            print('send')
        except TimeoutException as e:
            print(e)
        finally:
            driver.quit()
    

    실패하는 사람
    from selenium import webdriver
    from selenium.common.exceptions import TimeoutException
    
    if __name__ == '__main__':
        try:
            driver = webdriver.PhantomJS()
            driver.get('http://www.htmq.com/html/input_file.shtml')
            # new!
            driver.execute_script("document.getElementsByName('datafile')[0].style.display = 'none';")
            elm = driver.find_element_by_name("datafile")
            print('get')
            elm.send_keys('./test.jpg')
            print('send')
        except TimeoutException as e:
            print(e)
        finally:
            driver.quit()
    

    이 예에서는 정상적으로 움직이는 것을 일부러 움직이지 않게 하고 있다.
    넘어서 실패하는 것 = style.display = 'none' 어떤 것은 이것을 없애야 한다.
    driver.execute_script("document.getElementsByName('datafile')[0].style.display = '';")
    

    만난 사이트는 숨겨진 input을 내포한 div로 버튼을 만들고 있었다.
    수동이나 SeleniumIDE에서 문제없이 움직이고 있었기 때문에, 문제의 특정에 상당히 번거로웠다…

    좋은 웹페이지 즐겨찾기