161 lines
6.2 KiB
Python
161 lines
6.2 KiB
Python
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实例 |