selenium_elm_fengshen/run_window.py

161 lines
6.2 KiB
Python
Raw Normal View History

2024-07-22 07:21:36 +00:00
import configparser
import logging
from time import sleep
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from webdriver_manager.microsoft import EdgeChromiumDriverManager
from webdriver_manager.firefox import GeckoDriverManager
# 读取配置文件
config = configparser.ConfigParser()
config.read('config.ini', encoding="utf-8")
# 从配置文件中读取参数
url_base= config.get('base', 'url_base')
# url_login= config.get('base', 'url_login')
url_login = "https://mozi-login.alibaba-inc.com/?APP_NAME=LPD_TEAM_AEOLUS&BACK_URL=https%3A%2F%2Faeolus.ele.me"
print(url_login)
url_home = config.get('base', 'url_home')
url_work = config.get('base', 'url_work')
account = config.get('base', 'account')
password = config.get('base', 'password')
interval = config.get('base', 'interval')
driver_type = config.get('base', 'driver')
def open_url_with_selenium(url):
# 创建ChromeOptions对象
options = Options()
# 确保无头模式没有被启用
# options.add_argument('--headless') # 注释掉这行
if driver_type.lower()=="firefox":
driver_path = GeckoDriverManager().install()
try:
service = Service(executable_path=driver_path)
driver = webdriver.Firefox(service=service, options=options)
logging.info("成功 - 使用firefox")
except Exception as e:
logging.error("无法创建WebDriver实例: %s", str(e))
return None
elif driver_type.lower()=="edge":
driver_path = EdgeChromiumDriverManager().install()
# 创建WebDriver实例
try:
service = Service(executable_path=driver_path)
driver = webdriver.Edge(service=service, options=options)
logging.info("成功 - 使用edge")
except Exception as e:
logging.error("无法创建WebDriver实例: %s", str(e))
return None
else: # 默认谷歌驱动
# 确保chromedriver已经安装并获取其路径
driver_path = ChromeDriverManager().install()
# 创建Service对象
# 创建WebDriver实例
try:
service = Service(executable_path=driver_path)
driver = webdriver.Chrome(service=service, options=options)
logging.info("成功 - 使用chrome")
except Exception as e:
logging.error("无法创建WebDriver实例: %s", str(e))
return None
try:
# 打开指定的URL
logging.info("开始访问"+url_base)
driver.get(url_base)
sleep(3) # 等待3秒
while True:
if driver.current_url==url_login:
# 填写手机号码
username_field = driver.find_element(By.NAME, 'domainAccount')
username_field.clear()
username_field.send_keys(account)
# 填写密码
password_field = driver.find_element(By.NAME, 'password')
password_field.clear()
password_field.send_keys(password)
# 使用WebDriverWait等待登录按钮变为可点击状态
login_button = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.CLASS_NAME, 'sso-btn-submit'))
)
login_button.click()
# 等待一段时间,确保登录过程完成
sleep(3)
break
print("当前URL", driver.current_url)
print("当前URL", driver.current_url)
while True:
if driver.current_url==url_home:
# 登录成功,已经进入了主页
print("cookie",driver.get_cookies())
# 跳转到 https://aeolus.ele.me/?targetId=3818#/group/schedule/view/manage
driver.get(url_work)
if driver.current_url == url_work:
break
# 开始查找数据
while driver.current_url == url_work:
sleep(interval)
# 查找目标值
# 定位到包含目标完单量的div元素
print("开始查找 - 定位到包含目标完单量的div元素")
div_element = driver.find_element(By.XPATH, "//div[@class='ant-space-item'][2]/span")
print(div_element.text)
print("开始查找 - 定位到包含目标完单量的div元素")
# 定位表格
table = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.CSS_SELECTOR, ".ant-table-thead")))
# 获取表头
headers = []
header_elements = table.find_elements(By.TAG_NAME, "th")
for header in header_elements:
headers.append(header.text)
print("Headers:", headers)
# 定位表体
tbody = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.CSS_SELECTOR, ".ant-table-tbody")))
# 获取表体数据
rows = tbody.find_elements(By.TAG_NAME, "tr")
data = []
for row in rows:
cols = row.find_elements(By.TAG_NAME, "td")
row_data = [col.text for col in cols]
data.append(row_data)
print("Data:")
for row in data:
print(row)
# 等待一段时间,确保登录过程完成
sleep(5)
# 检查是否登录成功
if 'login' not in driver.current_url:
print("登录成功!")
else:
print("登录失败,请检查用户名和密码。")
# 返回WebDriver实例而不是关闭它
return driver
except Exception as e:
print(e)
return None
if __name__ == '__main__':
driver = open_url_with_selenium(url_base)
# 如果你想要在后续操作中使用driver可以在这里添加代码
# 例如driver.get('another_url')
# 在你完成所有操作后记得调用driver.quit()来关闭WebDriver实例