Selenium框架
【一】浏览器操作
1)页面操作
1.初始化浏览器对象
# 使用环境变量
from selenium import webdriver
browser = webdriver.Chrome()
browser = webdriver.Chrome(path)
browser.close() # 关闭浏览器
# 使用绝对路径
from selenium.webdriver.chrome.service import Service
from selenium import webdriver
service = Service(executable_path="./chromedriver.exe")
browser = webdriver.Chrome(service=service)
browser.get("https://www.jd.com")
browser.close()
2.访问页面
from selenium import webdriver
browser = webdriver.Chrome()
browser.get(r'https://www.baidu.com/')
browser.close()
类型 | 功能 | 代码 |
---|---|---|
设置浏览器大小 | 设置分辨率 500*500 | browser.set_window_size(500, 500) |
设置浏览器大小:全屏 | browser.maximize_window() | |
前进后退 | 后退 | browser.back() |
前进 | browser.forward() | |
获取页面基础属性 | 网页标题 | print(browser.title) |
当前网址 | print(browser.current_url) | |
浏览器名称 | print(browser.name) | |
网页源码 | print(browser.page_source) |
3.切换选项卡
from selenium import webdriver
import time
# 创建 Chrome 浏览器的实例
browser = webdriver.Chrome()
# 打开百度网页
browser.get('https://www.baidu.com/')
# 隐式等待2秒,确保页面加载完全
browser.implicitly_wait(2)
# 打印当前窗口句柄
print(browser.window_handles)
# 在当前浏览器实例中新开一个选项卡
browser.execute_script('window.open()')
# 获取所有选项卡的句柄列表
all_handles = browser.window_handles
# 切换到第二个选项卡(下标为1)
browser.switch_to.window(all_handles[1])
# 在第二个选项卡中打开淘宝网页
browser.get('http://www.taobao.com')
# 等待2秒
time.sleep(2)
# 切换回第一个选项卡(下标为0)
browser.switch_to.window(all_handles[0])
# 在第一个选项卡中打开hao123网页
browser.get('http://www.hao123.com')
# 等待2秒
time.sleep(2)
# 关闭当前选项卡
browser.close()
# 关闭浏览器实例
browser.quit()
2)八大选择器
属性 | 函数 |
---|---|
CLASS | find_element(by=By.CLASS_NAME, value=‘’) |
XPATH | find_element(by=By.XPATH, value=‘’) |
LINK_TEXT | find_element(by=By.LINK_TEXT, value=‘’) |
PARTIAL_LINK_TEXT | find_element(by=By.PARTIAL_LINK_TEXT, value=‘’) |
TAG | find_element(by=By.TAG_NAME, value=‘’) |
CSS | find_element(by=By.CSS_SELECTOR, value=‘’) |
ID | find_element(by=By.ID, value=‘’) |
【二】动作链
1)模拟鼠标操作
from selenium.webdriver.common.action_chains import ActionChains
操作 | 函数 |
---|---|
右击 | context_click() |
双击 | double_click() |
拖拽 | double_and_drop() |
悬停 | move_to_element() |
执行 | perform() |
2)模拟键盘操作
from selenium.webdriver.common.keys import Keys
操作 | 函数 |
---|---|
删除键 | send_keys(Keys.BACK_SPACE) |
空格键 | send_keys(Keys.SPACE) |
制表键 | send_keys(Keys.TAB) |
回退键 | send_keys(Keys.ESCAPE) |
回车 | send_keys(Keys.ENTER) |
全选 | send_keys(Keys.CONTRL,‘a’) |
复制 | send_keys(Keys.CONTRL,‘c’) |
剪切 | send_keys(Keys.CONTRL,‘x’) |
粘贴 | send_keys(Keys.CONTRL,‘x’) |
键盘F1 | send_keys(Keys.F1) |
3)示例
from selenium.webdriver.common.keys import Keys
# 输出Python
c.find_element(By.ID,'kw').send_keys('python')
# 回车键
c.find_element(By.ID,'kw').send_keys(Keys.ENTER)
# 点击
c.find_element(By.ID,'kw').click()
【三】执行JS代码
1)滚动到页面底部
import time
from selenium import webdriver
# 初始化WebDriver
browser = webdriver.Chrome()
# 打开京东网页
browser.get('https://www.jd.com/')
# 使用JavaScript执行滚动到页面底部的操作
browser.execute_script('window.scrollTo(0, document.body.scrollHeight)')
# 等待3秒,以便页面加载完成
time.sleep(3)
2)点击元素
# 使用JavaScript点击一个按钮
element = browser.find_element(By.ID,'button_id')
browser.execute_script('arguments[0].click();', element)
3)输入文本
# 使用JavaScript输入文本到文本框
element = browser.find_element(By.ID,'input_id')
text = 'Hello, World!'
browser.execute_script('arguments[0].value = arguments[1];', element, text)
4)拖动元素
# 使用JavaScript拖动一个可拖动的元素到目标位置
source_element = browser.find_element(By.ID,'source_element_id')
target_element = browser.find_element(By.ID,'target_element_id')
browser.execute_script('''
var source = arguments[0], target = arguments[1];
var offsetX = target.getBoundingClientRect().left - source.getBoundingClientRect().left;
var offsetY = target.getBoundingClientRect().top - source.getBoundingClientRect().top;
var event = new MouseEvent('mousedown', { bubbles: true, cancelable: true, view: window });
source.dispatchEvent(event);
event = new MouseEvent('mousemove', { bubbles: true, cancelable: true, view: window, clientX: offsetX, clientY: offsetY });
source.dispatchEvent(event);
event = new MouseEvent('mouseup', { bubbles: true, cancelable: true, view: window });
source.dispatchEvent(event);
''', source_element, target_element)
5)获取元素属性
# 使用JavaScript获取元素的属性值
element = browser.find_element(By.ID,'element_id')
attribute_value = browser.execute_script('return arguments[0].getAttribute("attribute_name");', element)
print(attribute_value)
【四】页面等待
1)强制等待
-
也叫线程等待, 通过线程休眠的方式完成的等待
import time time.sleep(n) # 阻塞等待设定的秒数之后再继续往下执行
2)显式等待
-
也称为智能等待,针对指定元素定位指定等待时间
-
在指定时间范围内进行元素查找,找到元素则直接返回
-
如果在超时还没有找到元素,则抛出异常
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 # 设置WebDriver等待时间为最多10秒,每隔0.5秒检查一次 #每隔 0.5s 检查一次(默认就是 0.5s) # 最多等待 10 秒,否则报错。 #如果定位到元素则直接结束等待 #如果在10秒结束之后仍未定位到元素则报错 wait = WebDriverWait(chrome, 10, 0.5) # 等待页面中的元素"J_goodsList"出现 wait.until(EC.presence_of_element_located((By.ID, 'J_goodsList'))
3)隐式等待
-
隐式等待设置之后代码中的所有元素定位都会做隐式等待
-
通过implicitly Wait完成的延时等待,注意这种是针对全局设置的等待
-
如设置超时时间为10秒,使用了implicitlyWait后
-
如果第一次没有找到元素,会在10秒之内不断循环去找元素
-
如果超过10秒还没有找到,则抛出异常
driver.implicitly_wait(10) # 在指定的n秒内每隔一段时间尝试定位元素,如果n秒结束还未被定位出来则报错
【四】无头浏览器
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
# 创建 ChromeOptions 实例
chrome_options = Options()
# 配置 ChromeOptions 的参数
# 指定浏览器分辨率
chrome_options.add_argument('window-size=1920x3000')
# 规避 bug,需要加上这个属性
chrome_options.add_argument('--disable-gpu')
# 隐藏滚动条,应对特殊页面
chrome_options.add_argument('--hide-scrollbars')
chrome_options.add_argument('blink-settings=imagesEnabled=false')
# 不加载图片,提升速度
chrome_options.add_argument('--headless')
# 无头模式,不提供可视化页面。在 Linux 下,如果系统不支持可视化,不加这条会启动失败
# chrome_options.binary_location = r"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe"
# 手动指定
# 创建 Chrome WebDriver 实例,并传入配置参数
driver = webdriver.Chrome(options=chrome_options)
driver.get('https://www.baidu.com') # 打开百度首页
# 在页面源代码中查找关键词 'hao123' 并打印结果
print('hao123' in driver.page_source)
# True
driver.close() # 关闭浏览器窗口,释放资源
标签:webdriver,框架,keys,Selenium,element,63,import,find,browser
From: https://www.cnblogs.com/Mist-/p/18336147