from selenium.webdriver.support import expected_conditions的函数
时间: 2024-05-21 13:18:12 浏览: 12
`expected_conditions` 是 Selenium 中的一个模块,它包含了一系列的预期条件函数,用于等待页面元素加载完成、页面跳转、元素是否可见等等。这些函数都是基于 `webdriver.support.ui.WebDriverWait` 类实现的。
以下是几个常用的预期条件函数:
- `presence_of_element_located`:等待页面元素出现在 DOM 中,但不一定可见。
- `visibility_of_element_located`:等待页面元素出现在 DOM 中并且可见。
- `element_to_be_clickable`:等待页面元素出现在 DOM 中并且可见,且可被点击。
- `title_contains`:等待页面标题包含指定的字符串。
- `url_contains`:等待页面 URL 包含指定的字符串。
使用这些函数,可以实现更加准确的页面元素操作和流程控制。
相关问题
指出下面代码存在的问题 # 模拟登录 import json import time from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions from selenium.webdriver.support.wait import WebDriverWait from utils import create_chrome_driver browser = create_chrome_driver() browser.get('https://login.taobao.com') # 隐式等待 browser.implicitly_wait(10) # 获取页面元素模拟用户输入和点击行为 username_input = browser.find_element(By.CSS_SELECTOR, '#fm-login-id') username_input.send_keys('15082435774') # 填写用户名 password_input = browser.find_element(By.CSS_SELECTOR, '#fm-login-password') password_input.send_keys('wu8266005') # 填写对应的密码 # 登录按钮 login_button = browser.find_element(By.CSS_SELECTOR, '#login-form > div.fm-btn > button') login_button.click() # 显示等待 wait_obj = WebDriverWait(browser, 10) wait_obj.until(expected_conditions.presence_of_element_located((By.CSS_SELECTOR, 'div.m-userinfo'))) time.sleep(15) # 获取登录的cookie数据,并且写入文件 with open('taobao2.json', 'w') as file: json.dump(browser.get_cookies(), file)
这段代码存在以下问题:
1. 密码明文存储:将密码明文写在代码中,存在安全隐患,建议使用配置文件或者环境变量等方式进行存储和读取。
2. 显式等待时间过长:在等待登录后获取用户信息时,使用了 `time.sleep(15)` 进行等待,建议使用显式等待的方式进行等待,可以更加准确地等待元素出现。
3. 代码可读性差:代码结构不清晰,建议使用函数或者类等方式对代码进行组织,提高可读性和可维护性。
4. 代码复用性差:在获取登录的cookie数据时,将数据直接写入文件中,不方便在其他地方进行复用,建议将数据返回给调用方进行处理。
5. 代码健壮性差:没有对获取元素和等待元素出现等操作进行异常处理,可能会因为元素未找到或者等待超时等问题导致程序崩溃。
针对这些问题,可以进行如下调整:
```python
import json
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
from utils import create_chrome_driver
def login(username, password):
browser = create_chrome_driver()
try:
browser.get('https://login.taobao.com')
# 隐式等待
browser.implicitly_wait(10)
# 获取页面元素模拟用户输入和点击行为
username_input = browser.find_element(By.CSS_SELECTOR, '#fm-login-id')
username_input.send_keys(username) # 填写用户名
password_input = browser.find_element(By.CSS_SELECTOR, '#fm-login-password')
password_input.send_keys(password) # 填写对应的密码
# 登录按钮
login_button = browser.find_element(By.CSS_SELECTOR, '#login-form > div.fm-btn > button')
login_button.click()
# 显式等待
wait_obj = WebDriverWait(browser, 10)
wait_obj.until(EC.presence_of_element_located((By.CSS_SELECTOR, 'div.m-userinfo')))
# 获取登录的cookie数据,并返回给调用方
cookies = browser.get_cookies()
return cookies
finally:
browser.quit()
```
这个函数可以接收用户名和密码作为参数,并返回登录后的cookie数据,同时加入了异常处理等机制,提高了代码的健壮性和可用性。
from selenium import webdriver from selenium.webdriver.common.keys import Keys from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC def login_bp(url, username, password): # 创建一个浏览器实例 options = webdriver.EdgeOptions() options.add_experimental_option('detach', True) # 打开登录页面 browser = webdriver.Edge() browser.get(url) # 找到用户名输入框并输入密码 username_input = WebDriverWait(browser, 10).until(EC.visibility_of_element_located((By.ID, 'username'))) username_input.send_keys(username) # 找到密码输入框并输入密码 password_input = WebDriverWait(browser, 10).until(EC.visibility_of_element_located((By.ID, 'password'))) password_input.send_keys(password) # 模拟回车键,提交表单 login_btn = browser.find_element(by=By.ID, value='denglub') login_btn.send_keys(Keys.ENTER) return 0 if __name__ == '__main__': # 定义目标信息 atr_url = { 'url': 'http://pfs.ikhtech.com/FAPI/login.jsp', 'username': 'zhangwei', 'password': 'zhangwei' } login_bp(atr_url['url'], atr_url['username'], atr_url['password']) 之后我该如何获取页面返回的cookie、响应体、载荷等信息
您可以使用Selenium的`browser`对象来获取页面返回的cookie、响应体、载荷等信息。以下是一些常用的方法:
1. 获取cookie信息:
- 使用`browser.get_cookies()`方法可以获取当前页面的所有cookie。
- 使用`browser.get_cookie(name)`方法可以获取指定名称的cookie。
2. 获取响应体和载荷信息:
- 使用`browser.page_source`属性可以获取当前页面的HTML源代码。
- 使用`browser.current_url`属性可以获取当前页面的URL。
这些方法可以在登录成功后调用,例如在`login_bp`函数的最后添加以下代码:
```python
# 获取cookie信息
cookies = browser.get_cookies()
print("Cookies:", cookies)
# 获取响应体和载荷信息
page_source = browser.page_source
current_url = browser.current_url
print("Page Source:", page_source)
print("Current URL:", current_url)
```
请注意,获取这些信息的时机很重要。在登录成功后,您可以立即获取cookie信息。而获取响应体和载荷信息可能需要等待页面加载完成,可以使用合适的等待条件(例如`EC.visibility_of_element_located`)来确保页面加载完成后再进行获取。