from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
s=Service(r'C:\Users\Administrator\Desktop\chromedriver.exe')
driver=webdriver.Chrome(service=s)
# css定位
driver.find_element(By.CSS_SELECTOR,'[class~=article]')
# class定位
driver.find_element(By.CLASS_NAME,'main-header-box')
# id定位
driver.find_element(By.ID,'__nuxt')
# name定位
driver.find_element(By.NAME,'theme-color')
# Xptah 定位
driver.find_element(By.XPATH,'//*[@text="确定"]')
# 超链接定位
driver.find_element(By.LINK_TEXT,'确认点击')
# 超链接模糊定位
driver.find_element(By.PARTIAL_LINK_TEXT,'确认')
element.click()
web.find_element(By.XPATH,'//*[@text="确定"]').click()
element.clear()
web.find_element(By.XPATH,'//*[@text="文本框"]').clear()
element.send_keys('要输入的文本')
web.find_element(By.XPATH,'//*[@text="文本框"]').send_keys("123456")
driver.find_element(By.CSS_SELECTOR,"[name='upfilea']").send_keys(r'C:\Users\Administrator\Desktop\chromedriver.exe')
element.size
web.find_element(By.XPATH,'//*[@text="确定"]').size
element.location
web.find_element(By.XPATH,'//*[@text="确定"]').location
element.get_attribute('属性名称')
web.find_element(By.XPATH,'//*[@text="确定"]').get_attribute(href)
element.is_displayed()
web.find_element(By.XPATH,'//*[@text="确定"]').is_displayed()
element.is_enabled()
web.find_element(By.XPATH,'//*[@text="确定"]').is_enabled()
element.is_selected()
web.find_element(By.XPATH,'//*[@text="确定"]').is_selected()
driver.maximize_window()
driver.web.set_window_size(800,800)
driver.set_window_position(480,480)
driver.back()
driver.forward()
driver.refresh()
driver.close()
driver.quit()
driver.get_screenshot_as_png()
这里输出为byte类型,需要存储为图片格式driver.title
driver.current_url
driver.page_source
# 导包
from selenium.webdriver import ActionChains
# 实例化对象
action=ActionChains(driver)
# 通过链式调用来进行鼠标操作
action.move_to_element(element).perform()
action.double_click(element).perform()
action.context_click(element).perform()
action.move_to_element(element).perform()
action.drag_and_drop(element1,element2).perform()
action.drag_and_drop_by_offset(element1,x,y).perform()
action.key_down(键值).perform()
action.key_down('a').perform()
action.key_up(键值).perform()
action.key_down('a').perform()
element.send_keys('键值')
driver.find_element(By.CSS_SELECTOR,"[name='t1']").send_keys(Keys.BACKSPACE)
driver.find_element(By.CSS_SELECTOR,"[name='t1']").send_keys('a')
element.send_keys('键值')
driver.find_element(By.CSS_SELECTOR,"[name='t1']").send_keys(Keys.CONTROL,'c')
解释:隐式等待是全局通用的等待,比如我们设置15秒的等待时间,假如在15秒内找到元素就会继续往下跑,假如15秒内没有找到则报错
示例:driver.implicitly_wait(15)
解释:相比隐式等待,显式等待只对指定元素生效,不再是在整个WebDriver生命周期内生效【仅对元素生效】
示例:
# 导包
from selenium import webdriver
from selenium.webdriver import ActionChains, Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.support.wait import WebDriverWait
s=Service(r'C:\Users\Administrator\Desktop\chromedriver.exe')
driver=webdriver.Chrome(service=s)
driver.maximize_window()
url= 'http://sahitest.com/demo/keypress.htm'
driver.get(url)
# 进行封装,后续调用就不必重新再写一遍
def Find_element(driver,feature,timeout=10,poll_frequency=0.5):
"""
:param driver: driver
:param feature: 元素信息
:param timeout: 最长等待时间
:param poll_frequency: 元素查找的间隔时间
:return:
"""
feature_by, feature_value = feature
element = WebDriverWait(driver, timeout, poll_frequency).until(
# 条件:直到元素加载完成
lambda x:x.find_element(feature_by,feature_value)
)
# 返回找到的元素
return element
feature=By.CSS_SELECTOR,"[name='t1']"
# 调用并输入文本
Find_element(driver,feature).send_keys(123123)
time.sleep(5)
driver.quit()
解释:强制等待是一种固定的时间的等待,比如我们设置了15秒那么就会在15秒后代码才继续往下跑(需要导入time包)
示例:time.sleep(15)
前置操作:需要导入select包from selenium.webdriver.support.select import Select
注意:下拉框元素选择一般为select标签
select.select_by_index(排序位置)
示例:
# 导包
from selenium.webdriver.support.select import Select
element=driver.find_element(By.CSS_SELECTOR,'select')
# 实例化Select
select=Select(element)
# 选择下拉框的第2个选项
select.select_by_index(1)
select.select_by_visible_text(文本)
示例:
# 导包
from selenium.webdriver.support.select import Select
element=driver.find_element(By.CSS_SELECTOR,'select')
# 实例化Select
select=Select(element)
# 选择下拉框的选择文本为上海的选项
select.select_by_visible_text("上海")
select.select_by_value(value属性的值)
示例:
# 导包
from selenium.webdriver.support.select import Select
element=driver.find_element(By.CSS_SELECTOR,'select')
# 实例化Select
select=Select(element)
# 选择下拉框的value属性等于bj的选项
select.select_by_value("bj")
- alert:警告框
- confirm:确认框
- prompt:提示框
- **点击确定**:`driver.switch_to.alert.accept()`
- **点击取消**:`driver.switch_to.alert.dismiss()`
- **在弹出框的文本框内输入文本**:`driver.switch_to.alert.send_keys("要输入的文本")`
- **获取弹出框文本内容**:`driver.switch_to.alert.text`
使用driver.execute_script()
运行js代码来达到滑动滚动条的操作
示例:driver.execute_script("window.scrollBy(0,1000)")
解释: window.scrollBy(x,y),假如x=0,y=1000那么就是向上下滑动,假如x=1000,y=0则左右滑动
,比如x=1000,y=0那么就是向右滑动1000像素,x=0,y=1000那么就是向下滑动1000像素,假如要向上滑动1000像素,只要x=0,y=-1000即可。
frame标签有frameset、frame、iframe三种,frameset跟其他普通标签没有区别,不会影响到正常的定位,而frame与iframe对selenium定位而言是一样的,selenium有一组方法对frame进行操作。如下段代码所示
形式一:
<html lang="en">
<head>
<title>FrameTesttitle>
head>
<body>
<iframe src="a.html" id="frame1" name="myframe">iframe>
body>
html>
形式二:
<frameset>
<frame src="test01.html">....frame>
<frame src="test02.html">....frame>
frameset>
driver.switch_to.frame(0)
driver.switch_to.frame(0)
根据多个frame标签进行选择,默认第一个为0driver.switch_to.frame(id的值)
driver.switch_to.frame(my_id)
driver.switch_to.frame(name的值)
driver.switch_to.frame(my_name)
driver.switch_to.frame(element)
driver.switch_to.frame(driver.find_element(By.CSS_SELECTOR,"[src*='A']"))
driver.switch_to.default_content()
driver.window_handles
driver.current_window_handle
driver.switch_to.window(要切换的句柄代码)
获取BD_UPN的cookie代码示例:driver.get_cookie("BD_UPN")
返回结果为:{'domain': 'www.baidu.com', 'expiry': 1653226541, 'httpOnly': False, 'name': 'BD_UPN', 'path': '/', 'secure': False, 'value': '12314753'}
获取所有的cookie代码示例:driver.get_cookies()
返回结果为:[{'domain': '.baidu.com', 'expiry': 1652448941, 'httpOnly': False, 'name': 'BA_HECTOR', 'path': '/', 'secure': False, 'value': '2c8k018185a50hekio1h7q39e0q'}, {'domain': 'www.baidu.com', 'httpOnly': False, 'name': 'BD_HOME', 'path': '/', 'secure': False, 'value': '1'} ....省略]
添加cookie代码示例:driver.add_cookie({"name":'test',"value":'123456'})
==
或者可以这样添加:driver.add_cookie({'domain': 'www.baidu.com', 'httpOnly': False, 'name': 'bbaaa', 'path': '/', 'secure': False, 'value': '4444'})
注意::假如要在使用cookie只能在driver.get()
方法之后才能添加,所以要使用的话可以使用driver.get()
方法,然后使用driver.add_cookie()
添加cookie,最后调用driver.refresh()
方法刷新页面即可