python+selenium 계정 로그인 후 자동 클릭

7036 단어 자동화 테스트
회사에서codereview를 볼 때 코드를 보는 시간을 제한했다. 실제로 많은 코드는 프레임워크가 자동으로 생성하는 것에 속하기 때문에 너무 많은 시간을 들여서 볼 필요가 없고 기준에 도달하기 위해 브러쉬 시간을 필요로 한다(마우스로 웹 페이지의 고정 구역을 클릭한다).나는 자동화 테스트의 수단을 이용하여 이런 무효한 육체노동을 완성할 수 있을 것이라고 생각한다.
우선 요구 사항을 명확히 해야 한다.
  • 웹 페이지 자동 열기
  • 로그인 계정
  • 일정 시간마다 고정 구역을 클릭
  • 내가 생각한 방안은 두 가지가 있는데,sikuli 또는python+selenium이다.sikuli의 장점은 논리적 조작이 간단하고 직접적이며 그림을 표시로 사용하는데 창의 고정이 필요하고 백엔드에서 실행할 수 없다는 것이다.selenium는 약간 복잡하지만, 실행 속도가 빨라서 창을 가릴 수 있습니다.
    Python+selenium을 사용한 작은 예를 간단하게 기록해 보십시오.사용한 버전은 Python3.3 및selenium2, Windows 환경(현재 3.0 이상을 지원하고 있으며 여러 개의 포럼 블로그가 업데이트되지 않았습니다).우선 소프트웨어의 설치입니다. 파이톤은 군말 없이 환경 변수를 설정하는 것을 기억하세요.다음에selenium을 설치합니다. 만약 pip가 설치되어 있다면.명령을 직접 실행해 보세요.
         pip install -U selenium

    다른 방식,https://pypi.python.org/packages/source/s/selenium/selenium-2.52.0.tar.gz다운로드하여 압축을 풀다.윈도우즈 버전을 간단히 설명하지만, 사실 Unix에서도 차이가 많지 않으니, Wget을 사용하여 설치를 다운로드하십시오.명령 사용(setup은 일반적으로 타사 모듈 설치에 사용됩니다):
      cd c:\Python3\xxxx
      python setup.py install

    설치 과정 중 ImportError: No module named setuptools 이 나타날 수 있습니다. setuptools 모듈이 부족하여 Python은 기본적으로 설치되지 않습니다.에서http://pypi.python.org/pypi/setuptools각 시스템에 대한 설치 키트 및 설치 설명서, Windows 시스템의 경우 다운로드https://bootstrap.pypa.io/ez_setup.py설치 스크립트를 자동화합니다.실행:
    python ez_setup.py

    완성 후 selenium를 설치하면 됩니다.만약selenium에 대한 개념이 없거나 다른 의문이 있다면 문서를 참고할 수 있습니다.  http://selenium-python.readthedocs.org/en/latest/installation.html여기에는 나의 실례를 이용하여 절차를 간단하게 설명해 드리겠습니다.첫 번째 단계에서는 브라우저 열기를 완료합니다.selenium2는selenium와webdriver를 결합하여 각 브라우저에 해당하는 드라이브를 직접 도입하여 열면 됩니다. 크롬 드라이브는 따로 설치해야 할 수 있으니 주의하십시오.
      from selenium import webdriver
      browser = webdriver.Firefox()
      browser.get('https://www.xxx.com')

    웹 페이지를 열면 로그인해야 합니다. F12는 브라우저 디버거를 열고 작은 화살표로 요소를 선택하고 로그인 상자 계정과 비밀번호의 속성을 보며 보통 ID가 있습니다.selenium은 다음과 같은 방법으로 요소를 가져오고 다양한 작업을 할 수 있습니다. 구체적인 설명은 위의 링크 문서를 보십시오.
  • find_element_by_id
  • find_element_by_name
  • find_element_by_xpath
  • find_element_by_link_text
  • find_element_by_partial_link_text
  • find_element_by_tag_name
  • find_element_by_class_name
  • find_element_by_css_selector 중 id가 가장 효과적이고 편리하며 우선적으로 고려됩니다.요소를 선택한 후 WebDriver API를 통해 아날로그 키보드의 입력과 마우스 클릭을 호출할 수 있습니다.코드는 다음과 같습니다.
  • username="qun" 
    passwd="passwd"
    browser = webdriver.Firefox()
    browser.get('https://www.xxx.com')
    browser.implicitly_wait(10)
    elem=browser.find_element_by_id("loginFormUserName")
    elem.send_keys(username)
    elem=browser.find_element_by_id("loginFormPassword")
    elem.send_keys(passwd)
    elem=browser.find_element_by_id("loginFormSubmit")
    elem.click()

    일반적으로 로그인한 후 페이지는 모두 새로운 페이지로 이동하는데 어떻게 새로운 페이지를 얻습니까?여기에 창 손잡이의 개념이 있는데, 창 손잡이를 전환해서 완성한다.주의!때때로 원소가 한 프레임 안에 있을 때도 swtich를 통해 전환해야 한다.여기에wait 함수(위에도 있음)가 나타나는데 페이지가 불러오는 데 시간이 걸리기 때문에 클릭한 후에 요소가 불러올 가능성이 높습니다. 다음 절에서wait를 상세하게 설명하겠습니다.
    browser.implicitly_wait(10)
    browser.switch_to_window(browser.window_handles[-1])

    이후에 클릭해야 할 구역을 선택하고 여기는 xpath 포지셔닝을 사용합니다. 자동화 테스트 과정에서 요소가 id,name 등 방법을 통해 포지셔닝을 할 수 없을 가능성이 높기 때문입니다. (많은 사람들이 쓰지 않고 테이블 세트를 좋아합니다. 저도 마찬가지입니다) xpath는 쓸모가 있습니다.자주 사용하는 게으름 피우는 방법은 Firefox가 xpath 플러그인을 설치하고 오른쪽 단추를 누르면 바로 얻을 수 있습니다.여기서는 권장하지 않기 때문에 플러그인을 사용하면 코드에 이런 것들이 가득할 수 있다.
    XPath(/html/body/div/div[3]/div[2]/div[4]/p[2])

    부득이하지 않으면, 가능한 한 원소의 특징을 사용하여, 예를 들어 단추의name를 지정합니다.또는 부모 요소를 통해 하위 요소를 배치합니다.
     username =browser.find_element_by_xpath("//input[@name='username']")
     clear_button = browser.find_element_by_xpath("//form[@id='loginForm']/input[4]")

    코드는 다음과 같습니다. 온라인에서 자주 등장하는 By의 사용법은 패키지를 도입해야 합니다.
    from selenium.webdriver.common.by import By

    여기에 다른 함수를 사용하는데 나는 어떤 차이가 있는지 모르겠다.
    for i in range(100):
        elem=WebDriverWait(browser, 30).until(
            lambda x:x.find_element_by_xpath("//table[@class='aaa']"/td[1]))
        elem.click()
        time.sleep(20)
        print ("click",i)

    그리고 여기서wait 함수를 언급해야 한다.selenium2에서 지연 대기는 두 가지로 나뉘는데 대기 표시와 스텔스 대기 표시이다.  
  • 대기현식대기는 특정한 원소가 나타나거나 특정한 원소가 클릭할 수 있는 조건을 명확하게 기다려야 하며 기다리지 못하면 계속 기다린다. 정해진 시간 안에 찾지 못하면 Exception에서 뛰어나간다.
  •       element = WebDriverWait(driver, 10).until(
            EC.presence_of_element_located((By.ID, "myDynamicElement"))
        )
  • 스텔스 대기 주의, 스텔스 대기는 모든dom 요소가 어떤 요소를 찾을 때 바로 찾지 못하면 이렇게 오래 시도하는 것을 알려줍니다.  
  • browser.implicitly_wait(10) # seconds

    양자의 차이는 하나는 시간 초과 대상을 직접 관리하는 것이고 하나는 웹 드라이브에 맡기는 것이다.물론 휴면법으로 마를 수도 있다.타임백을 도입하세요.
       time.sleep(20)

    이것은 단지 간단하게 용법을 설명할 뿐입니다. 개선할 수 있는 점이 많고, 봉인 함수가 없으며, 여러 개의 루틴을 사용하여 여러 개의 루틴을 병행하여 실행할 수 있습니다.앞으로 개선할 필요가 있다.

    좋은 웹페이지 즐겨찾기