Update nb4x.py
Browse files
nb4x.py
CHANGED
|
@@ -129,69 +129,85 @@ def wait_for_email_input(driver, timeout=30):
|
|
| 129 |
"""等待邮箱输入框出现并返回"""
|
| 130 |
global consecutive_failures
|
| 131 |
|
| 132 |
-
|
| 133 |
-
|
| 134 |
-
|
| 135 |
-
|
| 136 |
-
|
| 137 |
-
|
| 138 |
-
|
| 139 |
-
|
| 140 |
-
|
| 141 |
-
|
| 142 |
-
|
| 143 |
-
|
| 144 |
-
|
| 145 |
-
|
| 146 |
-
|
| 147 |
-
logger.info("找到 descope-wc 元素")
|
| 148 |
-
else:
|
| 149 |
-
logger.info("未找到 descope-wc 元素")
|
| 150 |
-
|
| 151 |
-
# 尝试获取 Shadow DOM 元素
|
| 152 |
try:
|
| 153 |
-
|
| 154 |
-
|
| 155 |
-
|
| 156 |
-
logger.info("
|
|
|
|
|
|
|
| 157 |
|
| 158 |
-
|
| 159 |
-
|
| 160 |
-
var wrapper = document.querySelector("#AppProvider_Wrapper > form > descope-wc");
|
| 161 |
-
if (!wrapper) {
|
| 162 |
-
return "wrapper not found";
|
| 163 |
-
}
|
| 164 |
-
var shadow1 = wrapper.shadowRoot;
|
| 165 |
-
if (!shadow1) {
|
| 166 |
-
return "shadow1 not found";
|
| 167 |
-
}
|
| 168 |
-
var elem = shadow1.querySelector("#TExZpnv5m6");
|
| 169 |
-
if (!elem) {
|
| 170 |
-
return "elem not found";
|
| 171 |
-
}
|
| 172 |
-
var shadow2 = elem.shadowRoot;
|
| 173 |
-
if (!shadow2) {
|
| 174 |
-
return "shadow2 not found";
|
| 175 |
-
}
|
| 176 |
-
var input = shadow2.querySelector("#input-vaadin-email-field-3");
|
| 177 |
-
if (!input) {
|
| 178 |
-
return "input not found";
|
| 179 |
-
}
|
| 180 |
-
return "found";
|
| 181 |
-
"""
|
| 182 |
-
result = driver.execute_script(input_js)
|
| 183 |
-
logger.info(f"元素查找结果: {result}")
|
| 184 |
-
|
| 185 |
-
if result == "found":
|
| 186 |
-
logger.info("邮箱输入框已加载")
|
| 187 |
-
return True
|
| 188 |
|
| 189 |
-
|
| 190 |
-
|
| 191 |
-
|
| 192 |
-
|
| 193 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 194 |
|
|
|
|
|
|
|
|
|
|
| 195 |
# 更新失败计数
|
| 196 |
if ENABLE_FAILURE_STOP:
|
| 197 |
consecutive_failures += 1
|
|
|
|
| 129 |
"""等待邮箱输入框出现并返回"""
|
| 130 |
global consecutive_failures
|
| 131 |
|
| 132 |
+
# 先等待页面加载完成
|
| 133 |
+
logger.info("等待页面完全加载...")
|
| 134 |
+
try:
|
| 135 |
+
WebDriverWait(driver, 20).until(
|
| 136 |
+
lambda d: d.execute_script('return document.readyState') == 'complete'
|
| 137 |
+
)
|
| 138 |
+
logger.info("页面加载完成")
|
| 139 |
+
|
| 140 |
+
# 再等待10秒,确保JavaScript完全执行
|
| 141 |
+
logger.info("等待10秒让JavaScript完全执行...")
|
| 142 |
+
time.sleep(10)
|
| 143 |
+
|
| 144 |
+
# 现在开始检查元素
|
| 145 |
+
start_time = time.time()
|
| 146 |
+
while time.time() - start_time < timeout:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 147 |
try:
|
| 148 |
+
# 获取并记录页面源码
|
| 149 |
+
page_source = driver.page_source
|
| 150 |
+
logger.info("当前页面源码:")
|
| 151 |
+
logger.info("=" * 50)
|
| 152 |
+
logger.info(page_source[:500] + "...")
|
| 153 |
+
logger.info("=" * 50)
|
| 154 |
|
| 155 |
+
# 获取页面标题
|
| 156 |
+
logger.info(f"当前页面标题: {driver.title}")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 157 |
|
| 158 |
+
# 检查页面源代码中是否包含关键元素
|
| 159 |
+
if "descope-wc" in page_source:
|
| 160 |
+
logger.info("找到 descope-wc 元素")
|
| 161 |
+
else:
|
| 162 |
+
logger.info("未找到 descope-wc 元素")
|
| 163 |
+
|
| 164 |
+
# 尝试获取 Shadow DOM 元素
|
| 165 |
+
try:
|
| 166 |
+
wrapper = driver.find_element(By.CSS_SELECTOR, "#AppProvider_Wrapper > form > descope-wc")
|
| 167 |
+
logger.info("找到 wrapper 元素")
|
| 168 |
+
except:
|
| 169 |
+
logger.info("未找到 wrapper 元素")
|
| 170 |
+
|
| 171 |
+
# 原来的元素查找逻辑
|
| 172 |
+
input_js = """
|
| 173 |
+
var wrapper = document.querySelector("#AppProvider_Wrapper > form > descope-wc");
|
| 174 |
+
if (!wrapper) {
|
| 175 |
+
return "wrapper not found";
|
| 176 |
+
}
|
| 177 |
+
var shadow1 = wrapper.shadowRoot;
|
| 178 |
+
if (!shadow1) {
|
| 179 |
+
return "shadow1 not found";
|
| 180 |
+
}
|
| 181 |
+
var elem = shadow1.querySelector("#TExZpnv5m6");
|
| 182 |
+
if (!elem) {
|
| 183 |
+
return "elem not found";
|
| 184 |
+
}
|
| 185 |
+
var shadow2 = elem.shadowRoot;
|
| 186 |
+
if (!shadow2) {
|
| 187 |
+
return "shadow2 not found";
|
| 188 |
+
}
|
| 189 |
+
var input = shadow2.querySelector("#input-vaadin-email-field-3");
|
| 190 |
+
if (!input) {
|
| 191 |
+
return "input not found";
|
| 192 |
+
}
|
| 193 |
+
return "found";
|
| 194 |
+
"""
|
| 195 |
+
result = driver.execute_script(input_js)
|
| 196 |
+
logger.info(f"元素查找结果: {result}")
|
| 197 |
+
|
| 198 |
+
if result == "found":
|
| 199 |
+
logger.info("邮箱输入框已加载")
|
| 200 |
+
return True
|
| 201 |
+
|
| 202 |
+
except Exception as e:
|
| 203 |
+
logger.error(f"查找元素时发生错误: {str(e)}")
|
| 204 |
+
|
| 205 |
+
logger.info("等待10秒后重试...")
|
| 206 |
+
time.sleep(10)
|
| 207 |
|
| 208 |
+
except Exception as e:
|
| 209 |
+
logger.error(f"等待页面加载时发生错误: {str(e)}")
|
| 210 |
+
|
| 211 |
# 更新失败计数
|
| 212 |
if ENABLE_FAILURE_STOP:
|
| 213 |
consecutive_failures += 1
|