项目文档说明
概述
本项目旨在使用Python和Selenium自动化操作预约同济大学体育馆场地,但仅作为内部学习交流,禁止外传或用于其它破坏公平性活动,如若侵权或造成不良影响请联系我及时删除。
项目涵盖了用户登录、元素查找与点击、元素滚动、处理弹出窗口以及自动进行多步骤操作的完整过程。本文档将详细阐述项目的技术路线、相关知识以及每个函数的功能和用法。
技术路线
Selenium WebDriver: 用于控制浏览器执行自动化操作。通过Selenium WebDriver,可以模拟用户在浏览器上的各种操作,如点击、输入、滚动等。
WebDriverWait: 用于显式等待某些条件的实现,如元素可点击、元素出现等。显式等待提高了代码的稳定性和可靠性。
ActionChains: 用于执行一系列复杂的用户操作,如点击并拖动、鼠标悬停等。
Datetime: 用于处理和格式化时间,以便在特定时间点进行操作。
脚本化配置读取: 通过读取配置文件,实现了灵活的参数配置,便于不同场景下的快速调整。
相关知识
Selenium WebDriver
Selenium WebDriver是Selenium项目的核心组件之一,用于与浏览器进行交互。通过WebDriver,可以实现对浏览器的各种操作,如打开页面、查找元素、点击元素等。常用类和方法包括:
webdriver.Chrome()
: 启动Chrome浏览器。find_element(By.XPATH, xpath_expression)
: 通过XPath查找元素。execute_script(script)
: 执行JavaScript脚本。
WebDriverWait
在进行自动化测试时,通常需要等待某些条件满足后再进行下一步操作。WebDriverWait提供了显式等待机制,可以设置等待条件和超时时间,常用方法包括:
until(condition)
: 等待直到某个条件为真。element_to_be_clickable((By.XPATH, xpath_expression))
: 等待元素可点击。
ActionChains
ActionChains用于执行一系列复杂的用户操作,例如点击并拖动、鼠标悬停、双击等。常用方法包括:
click_and_hold(element)
: 点击并按住元素。move_by_offset(xoffset, yoffset)
: 移动鼠标到指定的偏移位置。release()
: 释放按住的鼠标按钮。perform()
: 执行所有已定义的操作。
时间处理
在自动化操作中,时间处理非常重要。使用datetime
模块,可以获取和格式化当前时间,以便在特定时间点执行操作。常用方法包括:
datetime.now()
: 获取当前时间。strftime(format)
: 按指定格式输出时间。
项目结构
主函数
basic_info_input
是项目的主函数,负责执行整个自动化流程。其主要步骤包括:
初始化: 启动浏览器并打开指定页面。
登录: 读取用户名和密码,填写并提交登录表单。
选择运动类型和场地: 查找并点击指定的运动类型和场地。
等待并点击日期元素: 根据设定的时间阈值,不断刷新页面并查找特定日期元素,直到找到并点击为止。
点击座位: 尝试点击预定的座位,如果失败则尝试其他备选座位。
附加操作: 点击确认和复选框等附加操作,完成预定流程。
辅助函数
display_author_info(driver)
功能:显示作者信息弹出框,通过JavaScript脚本实现。
知识点:execute_script
方法用于执行JavaScript代码。
read_config(file_path)
功能:读取配置文件,返回配置字典。
知识点:文件读写操作,字符串处理。
scroll_element(driver, element_xpath, distance)
功能:水平滚动指定元素。
知识点:使用ActionChains
实现点击并拖动操作。
click_seat(driver, time_choice, selected_seat_index)
功能:尝试点击指定时间和座位位置的座位。
知识点:元素查找,属性判断,点击操作。
additional_clicks(driver)
功能:执行点击下一步按钮、复选框和确认按钮的附加操作。
知识点:显式等待,元素查找与点击。
流程图
关键技术解析
浏览器初始化与打开页面
chrome_options = webdriver.ChromeOptions()
chrome_options.binary_location = chrome_path
service = Service(driver_path)
service.start()
driver = webdriver.Chrome(options=chrome_options)
driver.get(url_input)
这一部分代码通过指定Chrome浏览器路径和驱动路径,启动浏览器并打开指定的URL。
显示作者信息
script = f"""
alert(`{author_info}`);
"""
driver.execute_script(script)
通过execute_script
方法执行JavaScript代码,显示作者信息的弹出框。
登录操作
username_input = driver.find_element(By.ID, 'j_username')
username_input.send_keys(student_id)
password_input = driver.find_element(By.ID, 'j_password')
password_input.send_keys(student_password)
submit_button = driver.find_element(By.ID, 'loginButton')
submit_button.click()
查找用户名和密码输入框,并输入相应的值,然后点击提交按钮完成登录。
等待并点击日期元素
while current_time < time_threshold:
try:
date_element = WebDriverWait(driver, 0.4).until(
EC.element_to_be_clickable((By.XPATH, date_xpath_expression)))
date_element.click()
break
except:
driver.refresh()
finally:
current_time = datetime.now().strftime('%H:%M:%S.%f')
通过不断刷新页面并显式等待,直到找到并点击指定的日期元素或时间超过阈值。
点击座位
seat_element = driver.find_element(By.XPATH, seat_xpath)
if "unselected-seat" in seat_element.get_attribute("class"):
next_div_element = seat_element.find_element(By.XPATH, './div')
next_div_element.click()
查找指定时间和座位位置的元素,并判断其是否可点击,如果可以则点击该元素。
附加操作
next_button = WebDriverWait(driver, 2).until(EC.element_to_be_clickable((By.XPATH, next_button_xpath)))
next_button.click()
checkbox = WebDriverWait(driver, 2).until(EC.element_to_be_clickable((By.XPATH, checkbox_xpath)))
checkbox.click()
confirm_button = WebDriverWait(driver, 2).until(EC.element_to_be_clickable((By.XPATH, confirm_button_xpath)))
confirm_button.click()
依次点击下一步按钮、复选框和确认按钮,完成附加操作。
总结
本项目通过Python和Selenium实现了自动化操作网页的功能,包括显示弹出框、登录、选择元素、点击座位和附加操作等。项目使用了显式等待、动作链、时间处理等技术,确保操作的稳定性和可靠性。通过配置文件的方式实现参数的灵活配置,提高了代码的可维护性和适应性。
mfjutfdpbv
《提防老千国语》剧情片高清在线免费观看:https://www.jgz518.com/xingkong/131676.html
lsfeklepan
《暴力云与送子鹳》动画片高清在线免费观看:https://www.jgz518.com/xingkong/11461.html
rboxcvgykc
《提防老千国语》剧情片高清在线免费观看:https://www.jgz518.com/xingkong/131676.html
gruaodefhj
真棒!
eyykihgmld
《国家地理:大白鲨的长途冒险旅程》记录片高清在线免费观看:https://www.jgz518.com/xingkong/90919.html
秦笑彦
你好,为什么我使用的时候会报错:
[23584:21228:1028/134527.271:ERROR:chrome_browser_cloud_management_controller.cc(161)] Cloud management controller initialization aborted as CBCM is not enabled. Please use the `--enable-chrome-browser-cloud-management` command line flag to enable it if you are not using the official Google Chrome build.DevTools listening on ws://127.0.0.1:57491/devtools/browser/1b7780b4-cf8c-40c2-acfb-e35d8f5933ff
[23584:5152:1028/134527.397:ERROR:sandbox_win.cc(895)] Sandbox cannot access executable. Check filesystem permissions are valid. See https://bit.ly/31yqMJR.: 鎷掔粷璁块棶銆?(0x5)[23584:21228:1028/134527.413:ERROR:network_service_instance_impl.cc(599)] Network service crashed, restarting service.
xdttwkpdli
看的我热血沸腾啊www.jiwenlaw.com
tahaqihzts
不错不错,我喜欢看 https://www.jiwenlaw.com/