selenium命令
1.简单Demo
2.find系列函数定位元素
3.参数设置&设置代理
4.窗口切换 和 ifrme切换
5.鼠标操作
6.键盘操作
7.其它方法
8.上传附件
1.简单Demo
from selenium import webdriver
import time
# 创建浏览器对象
# browser = webdriver.Chrome('./chromedriver')
browser = webdriver.Chrome()
# 访问网页
browser.get("https://www.baidu.com/")
# 获取输入框元素
input_element = browser.find_element_by_id("kw")
# 输入内容
input_element.send_keys('itcast')
button_element = browser.find_element_by_id('su')
button_element.click()
time.sleep(1)
url_element = browser.find_element_by_class_name("favurl")
url_element.click()
time.sleep(5)
# 退出浏览器
browser.quit()
# 获取用户名文本框大小
size=driver.find_element_by_id("userA").size
print('size:',size)
# 获取a标签内容
text=driver.find_element_by_id("fwA").text
print('a标签text:',text)
# 获取title
title=driver.title
print('title:',title)
# 获取当前页面url
url=driver.current_url
print('url:',url)
# 获取a标签href属性值
href=driver.find_element_by_id("fwA").get_attribute("href")
print('href属性值为:',href)
# 判断span是否显示
display=driver.find_element_by_css_selector('span').is_displayed()
print('span标签是否显示:',display)
# 判断取消按钮是否可用
enabled=driver.find_element_by_id('cancelA').is_enabled()
print('取消按钮是否可用:',enabled)
# 判断选项是否已经勾上
element = driver.find_element_by_xpath('//div[1]/div[2]/div[1]/span/input')
if element.is_selected():
print("按钮已经勾选了")
# 只匹配部分class值
driver.find_element_by_xpath('//div[contains(@class, "t-drawer--open")]')
# 拖动滑块
from selenium.webdriver import ActionChains
element = self.driver.find_elements_by_xpath('//div[@id="captcha"]/div/div/span')
if element:
ActionChains(self.driver).drag_and_drop_by_offset(element[0], 1120, 180).perform()
# 在同一个浏览器上,打开新标签
js = "window.open('{}','_blank');"
driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")
driver.maximize_window()
for _ in range(1):
driver.execute_script(js.format(
"https://www.baidu.com/"))
time.sleep(8)
# 添加cookie
1.需要先访问目标网站
2.再设置cookie,然后再访问目标网站才会生效
driver.get("https://www.baidu.com/")
# driver.add_cookie({"name": key值, "value":value值, "domain": ".woa.com"})
driver.add_cookie( {'name': 'foo', 'value': 'bar'})
driver.get("https://www.baidu.com/")
添加多个cookie
cookies = [
{'name': 'foo', 'value': 'bar'},
{'name': 'baz', 'value': 'qux'}
]
driver.add_cookies(cookies)
2.find系列函数定位元素
find_element_by_xxx 返回第一个符合条件 WebElement
find_elements_by_xxx 返回符合条件所有元素的WebEelemnt列表
find函数系列说明:
find_element_by_xpath 通过xpath查找数据
find_element_by_class_name 通过class 查询元素
find_element_by_id 通过 ID
find_element_by_name 通过name
find_element_by_tag_name 通过标签名称
find_element_by_css_selector css样式选择
find_element_by_link_text 通过链接内容查找
find_element_by_partial_link_text 通过链接内容包含的内容查找,模糊查询
3.参数设置&设置代理
1.设置 chrome 启动参数
options = webdriver.ChromeOptions()
options.add_argument('--headless') # 开启无界面模式
options.add_argument('--disable-gpu') # 禁用gpu,解决一些莫名的问题
browser = webdriver.Chrome('./chromedriver',chrome_options=options)
# 截图
browser.save_screenshot('截图路径')
2.启动设置User-Agent和代理
options = webdriver.ChromeOptions()
# 切换User-Agent
options.add_argument('--user-agent=Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1')
# 设置代理
options.add_argument('--proxy-server=代理服务器地址') # 设置代理
browser = webdriver.Chrome('./chromedriver',chrome_options=options)
4.窗口切换 和 ifrme切换
1.浏览器可能会打开多个网页,需要定位当前获取的网页元素是哪个窗体
# 通过点击可能会打开网页
# 获取当前窗体的列表
print(browser.window_handles)
# 获取当前选中窗体的名称
print(browser.current_window_handle)
print("切换前:",browser.title)
# 切换窗体
browser.switch_to.window(browser.window_handles[1])
print("切换后:",browser.title)
2.浏览器网页中可能包含 iframe 网页,需要获取 iframe(frame) 网页元素
通过 browser.switch_to.frame 切换iframe
eg: 网易云歌曲: https://music.163.com/#/discover/playlist
# 1> 获取iframe 元素对象
iframe_element = browser.find_element_by_id('g_iframe')
or:
iframe_element = browser.find_element_by_xpath('//iframe[@name="contentFrame"]')
# 2> 切换 iframe
browser.switch_to.frame(iframe_element)
print("切换后:",browser.page_source)
# 3> 切换回 主窗口
browser.switch_to.default_content()
print("切回后:",browser.page_source)

5.鼠标&键盘操作
context_click() 右击 --> 此方法模拟鼠标右键点击效果
double_click() 双击 --> 此方法模拟双标双击效果
drag_and_drop() 拖动 --> 此方法模拟双标拖动效果
move_to_element() 悬停 --> 此方法模拟鼠标悬停效果
perform() 执行 --> 此方法用来执行以上所有鼠标方法
1. 使用方法
from selenium.webdriver.common.action_chains import ActionChains
2. 实例化ActionChains对象:
Action=ActionChains(driver)
3. 调用右键方法:
element1=Action.context_click(element)
4. 执行:
element1.perform()
6.键盘操作
send_keys(Keys.BACK_SPACE)删除键(BackSpace)
send_keys(Keys.SPACE)空格键(Space)
send_keys(Keys.TAB)制表键(Tab)
send_keys(Keys.ESCAPE)回退键(Esc)
send_keys(Keys.ENTER)回车键(Enter)
send_keys(Keys.CONTROL,'a') 全选(Ctrl+A)
send_keys(Keys.CONTROL,'c')复制(Ctrl+C)
# 定位用户名
element=driver.find_element_by_id("userA")
# 输入用户名
element.send_keys("admin1")
# 删除1
element.send_keys(Keys.BACK_SPACE)
# 全选
element.send_keys(Keys.CONTROL,'a')
# 复制
element.send_keys(Keys.CONTROL,'c')
# 粘贴
driver.find_element_by_id('passwordA').send_keys(Keys.CONTROL,'v')
7.其它方法
1.获取元素属性和文本内容
# 获取属性
element..get_attribute('属性名')
# 获取文本内容
element.text
2.获取网页源码
browser.page_source
3.常用方法
element.clear() 清除文本
element.send_keys('xxxx') 输入
element.click() 单击元素
driver.maximize_window() 最大化 --> 模拟浏览器最大化按钮
driver.set_window_size(100,100) 浏览器大小 --> 设置浏览器宽、高(像素点)
driver.set_window_position(300,200) 浏览器位置 --> 设置浏览器位置
driver.back() 后退 --> 模拟浏览器后退按钮
driver.forward() 前进 --> 模拟浏览器前进按钮
driver.refresh() 刷新 --> 模拟浏览器F5刷新
driver.close() 关闭 --> 模拟浏览器关闭按钮(关闭单个窗口)
driver.quit() 关闭 --> 关闭所有WebDriver启动的窗口
driver.title 获取title
current_url 获取当前页面URL
4.执行 javascript 代码
# 去到页面最底层
js1="window.scrollTo(0,1000)"
# 去到页面最顶层
js2="window.scrollTo(0,0)"
# 执行最底层
driver.execute_script(js1)
# 执行最顶层
driver.execute_script(js2)
# 执行多条js命令
# 定位到滚动条所在的元素,然后进行滚动
script = 'var a = document.getElementsByClassName("apply-detail-contain")[0]; a.scrollTo(0, 1000);'
driver.execute_script(script)
8.上传附件
import time
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.action_chains import ActionChains
from pykeyboard import PyKeyboard
class Test:
@staticmethod
def test():
chrome_options = Options()
# 设置Chrome忽略网站证书错误
chrome_options.add_argument('--ignore-certificate-errors')
driver = webdriver.Chrome(options=chrome_options)
driver.get(要访问的网站)
driver.set_window_size(width=2576, height=1416)
time.sleep(10)
print("开始")
# 定位上传附件的按钮
driver.find_element_by_xpath(xxxxx).click()
time.sleep(5)
# 要上传的附件地址
file_path = r"E:\ceshi.png"
# 方法一: 通过ActionChains去输入附件的地址
ActionChains(driver).send_keys(file_path).perform()
# 方法二:通过键盘操作去输入附件的地址
board = PyKeyboard()
# 输入附件的地址
board.type_string(file_path)
time.sleep(3)
# 按键操作(可能需要进行调整,这里点击了两次确定键)
for _ in range(2):
board.tap_key(board.enter_key)
# 另外一种方式去发生确定键
board.tap_key("Enter")
time.sleep(5)
driver.close()
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。
文章标题:selenium命令
本文作者:伟生
发布时间:2021-03-06, 19:01:21
最后更新:2024-06-19, 21:37:42
原始链接:http://yoursite.com/2021/03/06/spider_13_selenium/版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。