title: 西交体美劳平台运动打卡签到签退 author: zaqai date: 2024-08-28 12:19:07 tags:
签到
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.chrome.options import Options
import time
from bs4 import BeautifulSoup
import random
import requests
from selenium.common.exceptions import TimeoutException
import logging
# 配置日志记录器
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
handlers=[
logging.FileHandler(r"C:\Users\17513\Desktop\sign_log.txt", mode='a'), # 保存到文件,模式'w'表示写模式,会覆盖文件
logging.StreamHandler() # 同时输出到控制台
]
)
# 获取日志记录器
logger = logging.getLogger(__name__)
# 生成0到30分钟之间的随机秒数(0-1800秒)
random_seconds = random.randint(0, 1800)
time.sleep(random_seconds)
# 配置选项
chrome_option = Options()
chrome_option.add_argument('--no-sandbox') #解决DevToolsActivePort文件不存在的报错
# chrome_option.headless = True # 以headless模式运行,具体代码如下:
chrome_option.add_argument('--disable-gpu')
chrome_option.add_argument('--disable-dev-shm-usage')
# 创建Chrome
browser = webdriver.Chrome(chrome_option)
browser.maximize_window() # 最大化窗口
wait = WebDriverWait(browser, 10) # 等待加载10s
# 在这里编写您的代码,例如访问网页、操作元素等
browser.get('https://ipahw.xjtu.edu.cn/pages/tabbar/index')
element_selector = "uni-view.w-360.h-90.u-flex.u-col-center.u-row-center"
# 找到元素并执行点击操作
try:
element = WebDriverWait(browser, 10).until(
EC.element_to_be_clickable((By.CSS_SELECTOR, element_selector))
)
element.click()
except TimeoutException:
print("超时,元素未加载完成")
input = wait.until(EC.presence_of_element_located(
(By.XPATH, '//*[@id="form1"]/input[1]')))
input.send_keys('3123358158')
input = wait.until(EC.presence_of_element_located(
(By.XPATH, '//*[@id="form1"]/input[2]')))
input.send_keys('PASSWD')
submit = wait.until(EC.element_to_be_clickable(
(By.XPATH, '//*[@id="account_login"]')))
submit.click() # 点击登录按钮
time.sleep(3)
# 使用CSS选择器定位元素
css_selector = "body > uni-app > uni-page > uni-page-wrapper > uni-page-body > uni-view > uni-view.w-690.m-0-auto.f.f-j-sb.f-row > uni-view:nth-child(5)"
# 找到元素并执行点击操作
element = browser.find_element(By.CSS_SELECTOR, css_selector)
element.click()
time.sleep(3)
# cookies = browser.get_cookies()
# print(cookies)
# # 打印cookie信息
# for cookie in cookies:
# print(cookie)
local_storage_items = browser.execute_script("return localStorage;")
token=local_storage_items['_token']
browser.quit()
# # 打印localStorage的所有项
# for key in local_storage_items:
# print(f"Key: {key}, Value: {local_storage_items[key]}")
# print(browser.page_source)
# browser.save_screenshot('screenshot1.png')
def signRun(token):
longitude_center = 108.65511
latitude_center = 34.257645
error_range = 0.0008
longitude = round(random.uniform(longitude_center - error_range, longitude_center + error_range), 6)
latitude=round(random.uniform(latitude_center - error_range, latitude_center + error_range), 6)
cookies = {
'JSESSIONID': '542705a7-d2af--b4cb-822d244d4164',
}
headers = {
'Accept': '*/*',
'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6,pt;q=0.5',
'Connection': 'keep-alive',
# 'Cookie': 'JSESSIONID=542705a7-d2af--b4cb-822d244d4164',
'Origin': 'https://ipahw.xjtu.edu.cn',
'Referer': 'https://ipahw.xjtu.edu.cn/pages/index/hdgl/hdgl_run?courseType=7&signType=1&activityAddress=&courseInfoId=1759468647346147329',
'Sec-Fetch-Dest': 'empty',
'Sec-Fetch-Mode': 'cors',
'Sec-Fetch-Site': 'same-origin',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36 Edg/125.0.0.0',
'content-type': 'application/json',
'sec-ch-ua': '"Microsoft Edge";v="125", "Chromium";v="125", "Not.A/Brand";v="24"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"Windows"',
'token': token,
}
json_data = {
'sportType': 2,
'longitude': longitude,
'latitude': latitude,
'courseInfoId': '1759468647346147329',
}
response_dao = requests.post(
'https://ipahw.xjtu.edu.cn/szjy-boot/api/v1/sportActa/signRun',
cookies=cookies,
headers=headers,
json=json_data,
)
return response_dao
for i in range(5):
res=signRun(token)
if res.status_code==200:
logger.info(f"第{i}次尝试...签到成功")
break
签退
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.chrome.options import Options
import time
from bs4 import BeautifulSoup
import random
import requests
from selenium.common.exceptions import TimeoutException
import logging
# 配置日志记录器
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
handlers=[
logging.FileHandler(r"C:\Users\17513\Desktop\sign_log.txt", mode='a'), # 保存到文件,模式'w'表示写模式,会覆盖文件
logging.StreamHandler() # 同时输出到控制台
]
)
# 获取日志记录器
logger = logging.getLogger(__name__)
# 生成0到30分钟之间的随机秒数(0-1800秒)
random_seconds = random.randint(0, 1800)
time.sleep(random_seconds)
# 配置选项
chrome_option = Options()
chrome_option.add_argument('--no-sandbox') #解决DevToolsActivePort文件不存在的报错
# chrome_option.headless = True # 以headless模式运行,具体代码如下:
chrome_option.add_argument('--disable-gpu')
chrome_option.add_argument('--disable-dev-shm-usage')
# 创建Chrome
browser = webdriver.Chrome(chrome_option)
browser.maximize_window() # 最大化窗口
wait = WebDriverWait(browser, 10) # 等待加载10s
# 在这里编写您的代码,例如访问网页、操作元素等
browser.get('https://ipahw.xjtu.edu.cn/pages/tabbar/index')
element_selector = "uni-view.w-360.h-90.u-flex.u-col-center.u-row-center"
# 找到元素并执行点击操作
try:
element = WebDriverWait(browser, 10).until(
EC.element_to_be_clickable((By.CSS_SELECTOR, element_selector))
)
element.click()
except TimeoutException:
print("超时,元素未加载完成")
input = wait.until(EC.presence_of_element_located(
(By.XPATH, '//*[@id="form1"]/input[1]')))
input.send_keys('3123358158')
input = wait.until(EC.presence_of_element_located(
(By.XPATH, '//*[@id="form1"]/input[2]')))
input.send_keys('PASSWD')
submit = wait.until(EC.element_to_be_clickable(
(By.XPATH, '//*[@id="account_login"]')))
submit.click() # 点击登录按钮
time.sleep(3)
# 使用CSS选择器定位元素
css_selector = "body > uni-app > uni-page > uni-page-wrapper > uni-page-body > uni-view > uni-view.w-690.m-0-auto.f.f-j-sb.f-row > uni-view:nth-child(5)"
# 找到元素并执行点击操作
element = browser.find_element(By.CSS_SELECTOR, css_selector)
element.click()
time.sleep(3)
# cookies = browser.get_cookies()
# print(cookies)
# # 打印cookie信息
# for cookie in cookies:
# print(cookie)
local_storage_items = browser.execute_script("return localStorage;")
token=local_storage_items['_token']
browser.quit()
# # 打印localStorage的所有项
# for key in local_storage_items:
# print(f"Key: {key}, Value: {local_storage_items[key]}")
# print(browser.page_source)
# browser.save_screenshot('screenshot1.png')
def signOutTrain(token):
longitude_center = 108.65511
latitude_center = 34.257645
error_range = 0.001
longitude = round(random.uniform(longitude_center - error_range, longitude_center + error_range), 6)
latitude=round(random.uniform(latitude_center - error_range, latitude_center + error_range), 6)
cookies = {
'JSESSIONID': '733a2040-c8ea-433e-bb58-15b760c150e9',
}
headers = {
'Accept': '*/*',
'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6,pt;q=0.5',
'Connection': 'keep-alive',
# 'Cookie': 'JSESSIONID=733a2040-c8ea-433e-bb58-15b760c150e9',
'Origin': 'https://ipahw.xjtu.edu.cn',
'Referer': 'https://ipahw.xjtu.edu.cn/pages/index/hdgl/hdgl_run?courseType=7&signType=2&activityAddress=&courseInfoId=1759468647346147329',
'Sec-Fetch-Dest': 'empty',
'Sec-Fetch-Mode': 'cors',
'Sec-Fetch-Site': 'same-origin',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36 Edg/125.0.0.0',
'content-type': 'application/json',
'sec-ch-ua': '"Microsoft Edge";v="125", "Chromium";v="125", "Not.A/Brand";v="24"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"Windows"',
'token': local_storage_items['_token'],
}
json_data = {
'longitude': longitude,
'latitude': latitude,
}
response_tui = requests.post(
'https://ipahw.xjtu.edu.cn/szjy-boot/api/v1/sportActa/signOutTrain',
cookies=cookies,
headers=headers,
json=json_data,
)
return response_tui
for i in range(5):
res=signOutTrain(token)
if res.status_code==200:
logger.info(f"第{i}次尝试...签退成功")
break
回复