引言:
上一节我们登录哔哩哔哩 用到了很多网页的操作,现这一章节具体介绍常用的一些:
启动浏览器和打开网页
from selenium import webdriver
# 启动Chrome浏览器
driver = webdriver.Chrome()
# 打开网页
driver.get("https://www.example.com")
查找元素
# 通过ID查找元素
element = driver.find_element_by_id("element_id")
# 通过class查找元素
element = driver.find_element_by_class_name("element_class")
# 通过XPath查找元素
element = driver.find_element_by_xpath("//div[@id='element_id']")
元素操作
# 点击元素
element.click()
# 输入文本
element.send_keys("text")
# 获取文本
text = element.text
# 获取属性
attribute = element.get_attribute("attribute_name")
# 获取元素的位置和大小
location = element.location
size = element.size
浏览器控制
# 后退
driver.back()
# 前进
driver.forward()
# 刷新当前页面
driver.refresh()
# 最大化窗口
driver.maximize_window()
# 关闭浏览器
driver.quit()
等待页面加载
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
# 等待元素可见
element = WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.ID, "element_id")))
# 等待元素存在
element = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.CLASS_NAME, "element_class")))
切换窗口和帧
# 切换到新窗口
driver.switch_to.window(driver.window_handles[-1])
# 切换到默认窗口
driver.switch_to.default_content()
# 切换到指定的iframe
driver.switch_to.frame("iframe_name")
截图
# 截取整个页面
driver.save_screenshot("screenshot.png")
# 截取指定元素区域
element = driver.find_element_by_id("element_id")
element.screenshot("element_screenshot.png")
下拉滚动条
# 下拉到页面底部
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
# 下拉到指定元素位置
element = driver.find_element_by_id("element_id")
driver.execute_script("arguments[0].scrollIntoView();", element)
鼠标操作
from selenium.webdriver import ActionChains
# 创建ActionChains对象
actions = ActionChains(driver)
# 移动鼠标到指定元素上
element = driver.find_element_by_id("element_id")
actions.move_to_element(element).perform()
# 在指定元素上进行右击操作
actions.context_click(element).perform()
# 在指定元素上进行双击操作
actions.double_click(element).perform()
切换到弹出框
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# 等待弹出框出现
alert = WebDriverWait(driver, 10).until(EC.alert_is_present())
# 获取弹出框的文本
text = alert.text
# 确认弹出框
alert.accept()
# 取消弹出框
alert.dismiss()
处理表单
# 输入文本到文本框
text_box = driver.find_element_by_id("text_box_id")
text_box.clear()
text_box.send_keys("text")
# 选择下拉列表中的选项
select = driver.find_element_by_id("select_id")
options = select.find_elements_by_tag_name("option")
options[1].click()
# 提交表单
form = driver.find_element_by_id("form_id")
form.submit()
处理弹出窗口
# 获取当前窗口句柄
current_window = driver.current_window_handle
# 获取所有窗口句柄
all_windows = driver.window_handles
# 切换到新打开的窗口
for window in all_windows:
if window != current_window:
driver.switch_to.window(window)
break
调整浏览器窗口大小
# 最大化浏览器窗口
driver.maximize_window()
# 设置浏览器窗口大小
driver.set_window_size(800, 600)
处理文件上传
# 找到上传文件的<input>元素
file_input = driver.find_element_by_id("input_file")
# 输入本地文件路径到<input>元素
file_input.send_keys("/path/to/file")
# 提交文件上传
driver.find_element_by_id("upload_btn").click()
切换到新标签页
# 打开新标签页
driver.execute_script('window.open("about:blank", "_blank");')
# 切换到新标签页
driver.switch_to.window(driver.window_handles[-1])
处理页面弹框
# 接受页面警告框
driver.switch_to.alert.accept()
# 拒绝页面警告框
driver.switch_to.alert.dismiss()
# 获取页面警告框文本
alert_text = driver.switch_to.alert.text
处理表格
# 找到表格
table = driver.find_element_by_id("table_id")
# 获取表格的所有行
rows = table.find_elements_by_tag_name("tr")
# 遍历表格的所有行和列
for row in rows:
columns = row.find_elements_by_tag_name("td")
for column in columns:
print(column.text)
处理验证码
# 保存验证码图片
driver.save_screenshot("screenshot.png")
# 找到验证码图片元素
captcha_element = driver.find_element_by_id("captcha_img")
# 获取验证码图片位置和大小
location = captcha_element.location
size = captcha_element.size
# 计算验证码图片四个角的坐标
left = int(location["x"])
top = int(location["y"])
right = int(location["x"] + size["width"])
bottom = int(location["y"] + size["height"])
# 截取验证码图片
from PIL import Image
image = Image.open("screenshot.png")
captcha_image = image.crop((left, top, right, bottom))
captcha_image.save("captcha.png")
处理验证弹窗
# 导入所需模块
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# 等待验证弹窗出现
alert = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CLASS_NAME, "validation-alert")))
# 获取验证弹窗文本
alert_text = alert.text
# 关闭验证弹窗
close_button = driver.find_element_by_class_name("close-button")
close_button.click()