from selenium import webdriver from selenium.webdriver.common.keys import Keys from selenium.webdriver.common.by import By def login_bp(url, username, password): # 创建一个浏览器实例 driver = webdriver.ChromeOptions() driver.add_experimental_option('detach', True) # 打开登录页面 browser = webdriver.Edge() browser.get(url) # 启动一个新的SeleniumWire请求拦截器 driver.request_interceptor = lambda request: request # 找到用户名输入框并输入用户名,通过xPath来定位用户名位置,谷歌端使用右键复制xPath username_input = browser.find_element(by=By.ID,value='username') username_input.send_keys(username) # 找到密码输入框并输入密码 password_input = browser.find_element(by=By.ID,value='password') password_input.send_keys(password) # 模拟回车键,提交表单 login_btn = browser.find_element(by=By.ID, value='denglub') login_btn.send_keys(Keys.ENTER) # 等待登录完成后的XHR请求,这是他的XHR信息 xhr_request = browser.wait_for_request('http://pfs.ikhtech.com/FAPI/Login', timeout=1) 如何优化
时间: 2024-04-21 09:24:24 浏览: 180
你可以尝试以下优化来改进你的代码:
1. 优化浏览器实例的创建:可以将 `webdriver.ChromeOptions()` 改为 `webdriver.Chrome()`,这样可以直接创建浏览器实例,而不需要使用 `add_experimental_option`。
2. 使用等待机制:在定位元素之前,可以使用 `WebDriverWait` 来等待元素加载完成,以避免找不到元素的异常。例如:
```python
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# 等待用户名输入框可见
username_input = WebDriverWait(browser, 10).until(EC.visibility_of_element_located((By.ID, 'username')))
```
3. 使用显式等待:可以使用 `WebDriverWait` 结合 `expected_conditions` 来等待特定的条件出现,例如等待登录完成后的XHR请求。例如:
```python
# 等待登录完成后的XHR请求
xhr_request = WebDriverWait(browser, 10).until(EC.url_to_be('http://pfs.ikhtech.com/FAPI/Login'))
```
注意:以上是一些优化建议,具体的优化策略还需要根据你的需求和场景进行调整。
阅读全文