자동 펀치 인 프로그램을 매우 자세하게 이해하는 제로 기반 10 분! !

이 기사는 파이썬의 셀레늄 모듈을 사용하여 자동 카드 펀칭 프로그램을 구현합니다.


이 기사의 구조 : 먼저 세 가지 준비 지식을 소개합니다. 거물은 건너 뛸 수 있습니다. 그런 다음 코드로 직접 시작하십시오 (이 코드는 매우 간단하기 때문입니다). 그러나 친구의 옆에있는 모듈과의 접촉은 권장하지 않습니다 . 코드를 직접보세요 . 결국 다른 웹 페이지 처리 방법은 여전히 ​​다릅니다.

이 기사는 원칙을 최대한 자세히 소개하고 독자가 읽은 후 다양한 체크인 웹 페이지에 대한 프로그램을 작성할 수 있도록하는 데 전념합니다.

셀레늄 모듈 소개

이 모듈을 사용하면 py 프로그램을 사용하여 Chrome 및 Firefox와 같은 주류 브라우저를 작동하여 자동화 된 테스트를 수행 할 수 있습니다.

컴퓨터가 브라우저로 작업을 수행하는 데 도움이되도록하려면 먼저 클릭 할 위치, 입력 할 항목, 클릭 할 위치를 알려야합니다. 이 "어디"는 셀레늄 모듈의 위치 지정을 통해 달성됩니다.

그것은 8 가지 위치 지정 방법을 제공 하며 관심있는 친구들은 볼 수 있습니다. 여기에서는 주로 프로그램에서 사용되는 세 가지 유형을 소개합니다. (구체적인 사용 방법은 코드 부분에서 설명합니다.)

방법 효과
find_element_by_id () 요소의 ID로 위치 지정
find_element_by_name () 요소 이름으로 찾기
find_element_by_xpath () 요소의 xpath로 찾기

무엇 id, name합은 xpath? 사실, 웹 페이지에있는 특정 콘텐츠의 속성입니다.

웹 페이지는 블로거의 프로필 사진, 읽고있는 텍스트 , 왼쪽 하단에있는 좋아요 버튼 (미친 노골적) 등 사용자가 탐색하는 블로그와 같은 많은 요소로 구성되어 있다는 것을 알고 있습니다 . 프로그래머가 웹 페이지를 작성할 때 사용하기 쉽도록 이러한 요소를 구별하면 이름에서 알 수 있듯이 다른 요소 id와를 추가 name합니다.

name그리고 그 id차이는 그 것이다 name우리의 이름 등이 있으며, id우리의 ID 번호처럼. 이름은 같지만 ID 번호는 같지 않은 사람이있을 수 있습니다. (이것은 엄격 하지는 않지만 이렇게 이해합시다. 다른 차이점은이 프로그램에서 그다지 중요하지 않습니다. ) 모든 요소 nameid속성을 거나 가지지는 않는다는 점은 주목할 가치가 있습니다. 따라서 우리는 여전히 세 번째 XPath위치 지정 방법이 필요합니다.

예를 들어, 탐색중인 블로그에서을 누르고 F12클릭 element하여 소스 코드 봅니다. 일부 태그는 다음과 같습니다.
여기에 사진 설명 삽입
예를 들어이 div 태그에는 id속성
여기에 사진 설명 삽입
있습니다 . 위 그림의 입력 태그에는 id이 속성과이 속성 모두 name.

다음 셀레늄 설치 :

pip install Selenium

브라우저 드라이버

Selenium 자체에는 브라우저를 여는 기능이 없으며 각 브라우저의 드라이버 협력이 필요합니다. 다음으로 브라우저 드라이버를 설치합니다. 다운로드하기 전에 브라우저 버전을 확인하십시오!
Chrome 브라우저 버전
은 드라이버 다운로드 용 Chrome의 다양한 버전에 해당합니다 .
다른 브라우저는 Baidu에서 주소를 다운로드 할 수 있습니다.

FirefoxDriver 및 기타 드라이버 다운로드 및 드라이버 구성

브라우저 드라이버를 다운로드 한 후에는 프로그램이 드라이버를 찾을 수 있도록 환경 변수를 구성해야합니다. (환경 변수에 저장된 경로는 프로그램을 실행해야 할 때 찾을 위치를 컴퓨터에 알려줍니다. 시스템이 수신하고 있습니다. 프로그램에 명령을 실행 한 후 환경 변수 테이블로 하나씩 이동하여 원하는 프로그램이 있는지 확인합니다.)

내 컴퓨터-> 속성-> 시스템 설정-> 고급-> 환경 변수-> 시스템 변수-> 경로, "F : \ ChromeDriver"디렉토리와 같은 드라이브 저장 경로를 Path 값에 추가합니다. 예 : 경로 필드, F : \ ChromeDriver

환경 변수를 구성한 후 다음 코드를 사용하여 브라우저 드라이버 드라이버를 얻을 수 있습니다.

 driver = webdriver.Chrome()

마우스 클릭 및 채우기 시뮬레이션

다음 웹 페이지를 예로 들어 학생 ID, 비밀번호를 입력하고 "로그인"버튼을 클릭해야합니다. 우선, 채우거나 클릭해야하는 위치를 찾기 위해 프로그램을 어떻게 사용합니까? 위에서 설명한 방법을 사용하십시오!
여기에 사진 설명 삽입
F12원소 소스 코드를 찾은 다음 아래 그림의 왼쪽에있는 마우스 아이콘을 클릭 한 다음 위의-모습이 요소의 소스 코드에 대한 그림과 학생 ID를 입력해야 할 위치를 클릭합니다.
여기에 사진 설명 삽입
우리는이 발견 :
여기에 사진 설명 삽입
이 태그에 이름 속성과 값이 있음을 알 수 있습니다 userid. 그런 다음 이름을 사용하여 위치를 찾습니다! 암호:

driver.find_element_by_name('userid').send_keys('你的学号')

위 그림 driver은이 기사의 드라이버 설치시 얻은 브라우저 드라이버입니다.

코드 한 줄이면 학생 ID를 입력 할 수 있습니다! 간단하지 않습니까? ! 우리가 채워야 할 다른 장소에 대해서도 똑같이하십시오.

name속성 이없는 레이블 을 발견 하면 어떻게해야합니까? 예를 들어, 다음 "로그인"버튼 :
여기에 사진 설명 삽입
상관 없습니다! 그것은이 있습니다 id. 다음 id을 찾는 데 사용 합니다.

driver.find_element_by_id('formSubmitBtn').click()#点击登录

XPath 포지셔닝

일부 위치 아니 id아니 name, 만 class, 수행 방법, class찾기 위해 사용하지 않습니까? 그러나 다른 요소도 동일한 class. 그런 다음 사용할 수만 있습니다 xpath(사실 각 페이지 요소에 고유 한 xpath가 있어야 하므로 이전 위치 지정에 xpath를 사용하는 것은 문제가되지 않습니다 )

특정 입력 상자의 xpath를 찾는 방법 : 입력 상자의 코드를 마우스 오른쪽 버튼으로 클릭하여 메뉴를 열고 아래와 같이 작동합니다. 여기에 사진 설명 삽입
입력 상자의 xpath를 찾은 변수에 저장합니다 (직접 사용은 매우 길다 ... 물론. 해당 위치에 직접 붙여 넣어도 문제 없음)

movement = "/html/body/div[1]/form/div[3]/div[2]/label[1]"#当日没有移动的按钮
driver.find_element_by_xpath(movement).click()#点选按钮

몇 가지 세부 사항

블로거의 예에 대한 체크인 정보를 입력 한 후 "제출"을 클릭해야합니다 . 잠시확인 창이 나타나고 제출을 확인해야합니다. 그러나 "제출"버튼을 클릭하면 아직 확인 창이 나타나지 않습니다. 따라서 두 번의 클릭 사이 에 절전 모드사용 하여 잠시 프로그램을 일시 중지하고이 창이 나올 때까지 기다린 다음 클릭하여 확인합니다.

driver.find_element_by_xpath(submit).click()#点击提交
time.sleep(2)
driver.find_element_by_xpath(check).click()#点击确定

완전한 코드

# -*- coding: utf-8 -*-
from selenium import webdriver
from selenium.webdriver.support.select import Select
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC
from pyrsistent._transformations import inc

# 只需修改下面三项即可 学号 密码 打卡网址
username = "登陆账号"
password = "对应密码"
url = "此处填写打卡网址" 

# 下面是每次填报的时候几个需要填写的地方,F12找到这些位置的 full XPath
movement = "/html/body/div[1]/form/div[3]/div[2]/label[1]"#有无移动
touch = "/html/body/div[1]/form/div[4]/div[2]/label[1]"#有无接触史
condition = "/html/body/div[1]/form/div[5]/div[2]/label[1]"#健康状况
quarantine = "/html/body/div[1]/form/div[6]/div[2]/label[1]"#是否隔离
inCollege = "/html/body/div[1]/form/div[7]/div[2]/label[1]"#是否在校
submit = "/html/body/div[1]/form/div[8]/a"#提交
check = "/html/body/div[3]/div[2]/div[2]/a[2]"#最后的确定按钮

# 模拟登陆打卡
def do_login(driver):
    # driver.maximize_window() 将窗口最大化
    # 找到登录框 输入账号密码
    driver.find_element_by_name('userid').send_keys(userName)
    driver.find_element_by_name('userpwd').send_keys(password)
    driver.find_element_by_id('formSubmitBtn').click()#点击登录

    driver.find_element_by_xpath(movement).click()
    driver.find_element_by_xpath(touch).click()
    driver.find_element_by_xpath(condition).click()
    driver.find_element_by_xpath(quarantine).click()
    driver.find_element_by_xpath(inCollege).click()
    
    driver.find_element_by_xpath(submit).click()#点击提交
    time.sleep(2)
    driver.find_element_by_xpath(check).click()#点击确定
    time.sleep(1)

if __name__ == '__main__':
    # 模拟浏览器打开网站
    driver = webdriver.Chrome()
    driver.get(url)
    # 登录并打卡
    do_login(driver)
    print("打卡结束")
    time.sleep(1)#终端给你时间确认已经打卡成功
    driver.quit()

프로그램을 작성한 후 exe에 입력 할 수 있으며, 시작할 때 추가하거나 데스크탑에 추가하지 않고 수동으로 시작하는 것도 매우 편리합니다. 패키지 exe 튜토리얼

면책 조항 :이 블로그는 학습 및 커뮤니케이션 전용이므로이 블로그에 작성된 콘텐츠를 불법 행위에 사용하지 마십시오. 이 블로거는 발생하는 모든 결과를 감당하지 않습니다.

자동 펀치 인을 실현하도록 서버에 구성

이 프로그램 작성을 마친 후, 언젠가 아침 내내 컴퓨터를 사용하지 않으면 체크인 시간을 놓칠 까 생각했습니다. 또는 체크인을 위해 컴퓨터를 한 번 켜는 것이 더 번거 롭습니다. 큰 사람은 아이디어를 제공했습니다. 프로그램을 서버에 직접 넣고 정기적으로 시작하는 것입니다. 하하하! (분명히 내 음식이라 생각조차 못해)

그래서 다음 블로그 를 통해 서버에 내 펀치 카드 프로그램을 구성 하여 자동 작업을 쉽게 완료 할 수 있습니다 ~

추천

출처blog.csdn.net/weixin_44559752/article/details/107634627