专业编程基础技术教程

网站首页 > 基础教程 正文

Python的web自动化学习(七)Selenium网页操作封装(二)

ccvgpt 2024-08-04 12:13:07 基础教程 17 ℃

引言:

上一节我们登录哔哩哔哩 用到了很多网页的操作,现这一章节具体介绍常用的一些:

Python的web自动化学习(七)Selenium网页操作封装(二)

启动浏览器和打开网页

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()

最近发表
标签列表