Files
SearchCompany/tool/aiqicha_login.py
2025-10-03 07:45:21 +08:00

138 lines
5.3 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# file: tool/aiqicha_login.py
from tool.web_browser import WebBrowser
import time
class AiqichaLoginManager:
def __init__(self, browser: WebBrowser):
self.browser = browser
def check_and_login(self):
"""启动后检测登录状态并自动登录"""
if not self.browser.load_cookies():
print("未找到有效Cookie开始登录流程...")
return self.login()
else:
print("已加载Cookie验证登录状态...")
# 加载cookie后访问页面验证是否真正登录
# 判断当前的url地址 如果是 https://aiqicha.baidu.com/company_detail_* 地址
if "company_detail" in self.browser.page.url:
# 等待页面加载完成
self.browser.page.wait_for_load_state("networkidle")
# 验证登录状态
if not self.check_login_status():
print("Cookie已过期或无效重新登录...")
return self.login()
else:
print("Cookie有效已登录")
return True
else:
print("未登录或已过期,开始登录流程...")
self.browser.page.goto("https://aiqicha.baidu.com")
# 等待页面加载完成
self.browser.page.wait_for_load_state("networkidle")
# 验证登录状态
if not self.check_login_status():
print("Cookie已过期或无效重新登录...")
return self.login()
else:
print("Cookie有效已登录")
return True
def check_login_status(self):
"""检测登录状态返回True表示已登录"""
try:
# 先关闭可能的功能上新弹窗
self.close_feature_popup()
# 等待页面加载完成
self.browser.page.wait_for_load_state("networkidle")
# 优先检查 .header-user-center-menu 元素判断是否已登录
logged_in_elements = self.browser.page.query_selector_all('.header-user-center-menu, .user-center')
for element in logged_in_elements:
if element and element.is_visible():
print("检测到已登录状态")
return True
# 检测用户中心元素判断已登录
user_center = self.browser.page.query_selector('.user-center')
if user_center and user_center.is_visible():
print("检测到已登录状态")
return True
# 检测登录相关元素
login_element = self.browser.page.query_selector('.login')
if login_element and login_element.is_visible():
print("检测到未登录状态")
return False
except:
try:
# 检测用户中心元素判断已登录
self.browser.page.wait_for_selector('.user-center', timeout=3000)
print("检测到已登录状态")
return True
except:
print("登录状态检测异常")
return False
def close_feature_popup(self):
"""关闭功能上新弹窗"""
try:
# 查找并点击关闭按钮
close_buttons = self.browser.page.query_selector_all('.close-icon.ivu-icon-ios-close')
for close_button in close_buttons:
if close_button.is_visible():
close_button.click()
print("已关闭功能上新弹窗")
# 等待弹窗消失
time.sleep(1)
break
except Exception as e:
# 如果没有找到弹窗,继续执行
pass
def login(self):
"""带状态检测的登录流程"""
self.browser.page.goto("https://aiqicha.baidu.com")
# 页面加载后执行反检测
self.browser.page.evaluate("""
delete navigator.__proto__.webdriver;
""")
# 等待页面加载完成
self.browser.page.wait_for_load_state("networkidle")
# 关闭可能的功能上新弹窗
self.close_feature_popup()
if not self.check_login_status():
print("开始执行登录流程...")
# 点击登录按钮
login_btn = self.browser.page.wait_for_selector('.login', timeout=20000)
login_btn.click()
print("请扫描页面二维码登录...")
time.sleep(3) # 给一些时间让二维码完全加载
# 等待登录完成,通过元素检测
try:
# 检测用户中心元素判断已登录
self.page.wait_for_selector('.header-user-center-menu', timeout=30000)
self.browser.save_cookies()
print("检测到已登录状态")
return True
except:
self.browser.save_cookies()
print("登录状态检测异常")
return False
## self.browser.page.wait_for_selector('.header-user-center-menu, .user-center', timeout=10000)
return True
if __name__ == '__main__':
print("登录成功!")