
首先要下载和谷歌对应版本的chromedriver.exe,放到python安装目录下
1.案例一close:关闭单个页面
quit:关闭所有页面
利用谷歌浏览器打开百度,并输入文字点击确定然后退出浏览器
from selenium.webdriver.common.by import By
from selenium import webdriver
# 创建浏览器对象
driver = webdriver.Chrome()
# 打开百度首页
driver.get("https://www.baidu.com/")
# 输入文字
#driver.find_element_by_id("kw").send_keys("sele") 已经过时的方法
driver.find_element(By.ID,"kw").send_keys("sele")
# 点击百度一下按钮
#driver.find_element_by_id("su").click() 已经过时的方法
driver.find_element(By.ID,"su").click()
# 退出
driver.quit()
2.WebDriver
1.页面元素定位, *** 作
浏览器对象.find_element(By.NAME,"name属性值").方法 浏览器对象.find_element(By.ID,"id属性值").方法 浏览器对象.find_element(By.XPATH,"xpath").方法 浏览器对象.find_element(By.CLASS_NAME,"类名").方法 浏览器对象.find_element(By.TAG_NAME,"标签名 就是div啥的").方法 浏览器对象.find_element(By.link_TEXT,"显示文本").方法 就相当于是等于才可以被选住 浏览器对象.find_element(By.PARTIAL_link_TEXT,"部分显示文本").方法 相当于包含 有这个文字的就会识别 浏览器对象.find_element(By.CSS_SELECtOR,"层叠样式显示器").方法
css方式
from selenium.webdriver.common.by import By
from selenium import webdriver
import time
# 创建浏览器对象
driver = webdriver.Chrome()
# 打开百度首页
driver.get("https://www.baidu.com/")
# 输入文字
driver.find_element(By.CSS_SELECtOR,"span.bg>.s_ipt").send_keys("macbookpro")
time.sleep(2)
# 点击百度一下按钮
driver.find_element(By.ID,"su").click()
time.sleep(2)
# 退出
driver.quit()
#通过css获取 By.CSS_SELECTOR
# 通过class获取 浏览器对象.find_element(By.CSS_SELECTOR,".s_ipt").方法
# 通过id获取 浏览器对象.driver.find_element(By.CSS_SELECTOR,"#kw").方法
# 后代选择器 浏览器对象.driver.find_element(By.CSS_SELECTOR,"span.bg>.s_ipt").方法
2.浏览器 *** 作
# 元素 *** 作
# 点击 click()
# 清除 clear 获取到的元素.clear()
# 追加 driver.find_element(By.CSS_SELECTOR,"span.bg>.s_ipt").send_keys("macbookpro") 就是再把上面的那行复制一下
# 覆盖 就是先clear清除 然后在把那句话重写一下换个内容
# 键盘输入 send_keys(value)
# current_url 获取当前url地址 断言的时候用
# title 返回当前页面title 也可以断言使用
# text 获取页面显示的文本 获取到元素直接.text
# get_attribute("name") 获取到元素.get_attribute("name") 拿到name 写class就是拿的class名字 value就是文本框里面的值
# is_displayed() 是否可见 结果即使真和假 获取到元素.is_displayed() 返回true或者false
# is_enabled() 展示是否可用
# is_selected() 展示是否选住 用于单选框
#设置浏览器窗口大小
driver.set_window_size(1080,600)
#最大化展示浏览器窗口
driver.maximize_window()
#最小化展示浏览器窗口
driver.minimize_window()
# 浏览器后退
driver.back()
# 前进
driver.forward()
# 刷新
driver.refresh()
# 截屏
driver.save_screenshot("png格式的图片 路劲")
# 这样写的好处就是分隔开 可以传参用
driver.get_screenshot_as_file("{}.{}".format("d:/aaa","png"))
3.鼠标,键盘 *** 作
用switch_to.window 方法 而switch_to_window方法已经不建议了
案例:打开淘宝网,点击聚划算并且进入页面,选择女装并进入页面,返回聚划算页面(就是关闭女装页面)
方式一:错误的方法
from selenium.webdriver.common.by import By
from selenium import webdriver
import time
# 打开淘宝网,点击聚划算并且进入页面,选择女装并进入页面,返回聚划算页面(就是关闭女装页面)
# 句柄 driver在get之后都是获取到的一个句柄 这个句柄只要不跳转页面,也就是不开启新的页面那么这个driver一直 *** 作的就是get的那个网址
# 但是一旦跳转了页面那么句柄就变了,就不是当前的页面对象了 所以要切换句柄
driver = webdriver.Chrome()
url = "https://www.taobao.com/"
driver.get(url)
time.sleep(4)
driver.find_element(By.link_TEXT,"聚划算").click()
# 查看句柄方法
driver1 = driver.current_window_handle
print(driver1)
time.sleep(5)
# 这里的By.link_TEXT 点击的是淘宝首页的女装而不是聚划算里面的女装 就是因为driver对象一样
driver.find_element(By.link_TEXT,"女装").click()
# 查看句柄方法
driver2 = driver.current_window_handle
print(driver2)
time.sleep(5)
#对比driver1和driver2两个句柄一样就知道一直是 *** 作的一个页面了,所以driver一直是 *** 作的一开始打开的页面,所以不会关闭女装页面,而是关闭淘宝页面
driver.back()
time.sleep(5)
driver.close()
方式二:
from selenium.webdriver.common.by import By
from selenium import webdriver
import time
# 打开淘宝网,点击聚划算并且进入页面,选择女装并进入页面,返回聚划算页面(就是关闭女装页面)
# 句柄 driver在get之后都是获取到的一个句柄 这个句柄只要不跳转页面,也就是不开启新的页面那么这个driver一直 *** 作的就是get的那个网址
# 但是一旦跳转了页面那么句柄就变了,就不是当前的页面对象了 所以要切换句柄
driver = webdriver.Chrome()
url = "https://www.taobao.com/"
driver.get(url)
driver.maximize_window()
time.sleep(4)
driver.find_element(By.link_TEXT,"天猫超市").click()
# 第一步:查看所有句柄方法
handles = driver.window_handles
print(handles[1])
# 第二步: 将聚划算句柄给driver 这样 *** 作的就是第二个页面的元素了
driver.switch_to.window(handles[1])
time.sleep(5)
driver.find_element(By.link_TEXT,"美容洗护").click()
time.sleep(5)
driver.back()
time.sleep(5)
driver.close()
#注意: 用switch_to.window 方法 而switch_to_window方法已经不建议了
方式三:在原来的driver对象打开的那个页面被关闭之后在 *** 作原来的也免得方法就是重新赋值
from selenium.webdriver.common.by import By
from selenium import webdriver
import time
# 打开淘宝网,点击聚划算并且进入页面,选择女装并进入页面,返回聚划算页面(就是关闭女装页面)
# 句柄 driver在get之后都是获取到的一个句柄 这个句柄只要不跳转页面,也就是不开启新的页面那么这个driver一直 *** 作的就是get的那个网址
# 但是一旦跳转了页面那么句柄就变了,就不是当前的页面对象了 所以要切换句柄
driver = webdriver.Chrome()
url = "https://www.taobao.com/"
driver.get(url)
driver.maximize_window()
time.sleep(3)
driver.find_element(By.link_TEXT,"天猫超市").click()
# 第一步:查看所有句柄方法
handles = driver.window_handles
print(handles[1])
# 第二步: 将聚划算句柄给driver 这样 *** 作的就是第二个页面的元素了
driver.switch_to.window(handles[1])
time.sleep(3)
driver.find_element(By.link_TEXT,"美容洗护").click()
time.sleep(3)
driver.back()
time.sleep(3)
driver.close()
# 关闭这个页面之后 就不能 *** 作原先点过来的页面了 因为页面已经关闭了 driver对象业就不存在了
# 想要 *** 作就要重新赋值
driver.switch_to.window(handles[0])
driver.find_element(By.link_TEXT,"天猫").click()
time.sleep(2)
driver.close()
driver.quit()
#########################################################
鼠标 *** 作
from selenium.webdriver.common.by import By from selenium.webdriver.common.action_chains import ActionChains from selenium import webdriver import time # 鼠标 *** 作 常见方法 perform()执行所有ActionChains中存储的行为 # 1.context_click() # 2.double_click() 双击 # 3. drag_and_drop() 拖动 # 4. move_to_element() 鼠标悬停 driver = webdriver.Chrome() url = "https://www.baidu.com/" driver.get(url) time.sleep(2) # 1.context_click() 右击 让鼠标放到设置上 setButton = driver.find_element(By.link_TEXT,"更多") # 对 设置 按钮的 *** 作行为封装起来 # 鼠标放到那两个字上 悬浮 ActionChains(driver).move_to_element(setButton).perform() time.sleep(5) # 在搜索框点击右键效果 setButton1 = driver.find_element(By.ID,"kw") ActionChains(driver).context_click(setButton1).perform() time.sleep(2) driver.quit()
键盘 *** 作
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys
from selenium import webdriver
import time
# Send_keys(Keys.Back_SPACE):删除键
# Send_keys(Keys.SPACE):空格键
# Send_keys(Keys.TAB):制表键
# Send_keys(Keys.ESCAPE): esc键
# Send_keys(Keys.ENTER):回车健
# Send_keys(Keys.CONTROL,'a'):全选
# Send_keys(Keys.CONTROL,'c'):复制
# Send_keys(Keys.CONTROL,'x'):剪切
# Send_keys(Keys.CONTROL,'v'):粘贴
# 键盘事件案例:
# 1、百度"seleniumm”2、删除多输入的m
# 3、再输入“空格教程T
# 4、ctrl+a,全选文本框内容5、 ctrl+x,剪切选择的内容6、ctrl+v,粘贴复制的内容7、回车代替单击,完成搜索8、退出浏览器
driver = webdriver.Chrome()
url = "https://www.baidu.com/"
driver.get(url)
time.sleep(2)
# 1、百度"seleniumm
driver.find_element(By.ID,"kw").send_keys("seleniumm")
time.sleep(2)
# 2、删除多输入的m 默认就是键盘的删除键 就是从后往前删除一下
driver.find_element(By.ID,"kw").send_keys(Keys.BACK_SPACE)
time.sleep(2)
# 3、再输入“空格教程T 得先清除在添加 要不就会追加内容可
driver.find_element(By.ID,"kw").clear()
driver.find_element(By.ID,"kw").send_keys("空格教程T")
time.sleep(2)
# 4、ctrl+a,全选文本框内容
driver.find_element(By.ID,"kw").send_keys(Keys.CONTROL,'a')
time.sleep(2)
# 5、 ctrl+x,剪切选择的内容
driver.find_element(By.ID,"kw").send_keys(Keys.CONTROL,'x')
time.sleep(2)
# 6、ctrl+v,粘贴复制的内容
driver.find_element(By.ID,"kw").send_keys(Keys.CONTROL,'v')
time.sleep(2)
# 7、回车代替单击,完成搜索
driver.find_element(By.ID,"kw").send_keys(Keys.ENTER)
time.sleep(2)
# 8、退出浏览器
driver.quit()
4.警告窗口处理
from selenium.webdriver.common.by import By from selenium.webdriver.common.action_chains import ActionChains from selenium.webdriver.common.keys import Keys from selenium import webdriver import time # 警告框 driver不能控制alert这种d出来的框的元素 # driver.switch_to.alert 先把控制权交给alert # text:训回(获取)alert / /confirm/i/ prompt中的文字信息。accept():接受现有警告框。 # dismiss():放弃现有警告框。 # send_keys( keysTosend):发送文本至警告框。 driver = webdriver.Chrome() url = "https://www.baidu.com/" driver.get(url) time.sleep(1) driver.maximize_window() setButton = driver.find_element(By.ID,"s-usersetting-top") ActionChains(driver).move_to_element(setButton).perform() time.sleep(1) driver.find_element(By.link_TEXT,"搜索设置").click() time.sleep(1) # 点击全部语言 driver.find_element(By.XPATH,'//*[@id="SL_0"]').click() time.sleep(1) driver.find_element(By.link_TEXT,"保存设置").click() time.sleep(2) # 接下来d出来一个alert的那个框 对他进行 *** 作 dd = driver.switch_to.alert # 获取文本信息 tt = dd.text print(tt) time.sleep(2) # 接受 就是点确定 dd.accept() time.sleep(2) driver.quit()5.多窗口,多表单处理
多窗口处理
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys
from selenium import webdriver
import time
# iframe 由外层转为内层的方法
# 打开qq页面,登录qq邮箱
driver = webdriver.Chrome()
url = "https://www.qq.com/"
driver.get(url)
time.sleep(1)
driver.maximize_window()
setButton = driver.find_element(By.link_TEXT,"登录")
ActionChains(driver).move_to_element(setButton).perform()
time.sleep(2)
driver.find_element(By.CSS_SELECtOR,".sel").click()
time.sleep(1)
driver.find_element(By.link_TEXT,"登录").click()
time.sleep(1)
# 切换到iframe内置页面 第一种方法 直接输入父级ifrane的name属性值
#driver.switch_to.frame("ptlogin_iframe")
# 第二中方法 给对象
ifnameObj = driver.find_element(By.XPATH,'//*[@id="ptlogin_iframe"]')
driver.switch_to.frame(ifnameObj)
driver.find_element(By.ID,"switcher_plogin").click()
time.sleep(1)
driver.find_element(By.ID,"u").send_keys("854639450")
driver.find_element(By.ID,"p").send_keys("gy13933767394")
driver.find_element(By.ID,"login_button").click()
time.sleep(1)
driver.quit()
6.设置元素等待
强制>隐式>显示
元素等待
# 强制等待 休眠 time.sleep 让线程休眠
driver = webdriver.Chrome()
url = "https://www.qq.com/"
driver.get(url)
time.sleep(1)
driver.quit()
# 隐式等待 全局生效 如果给一个数字10 name这个元素需要1秒加载出来就加载1秒 剩下9秒就不会加载了 超时就会抛出异常
driver = webdriver.Chrome()
url = "https://www.qq.com/"
driver.get(url)
driver.implicitly_wait(10)
driver.quit()
# 显式等待 就是明确的等待,等待元素出现才会去 *** 作,要不然就一直等,等出去就超时 这是某个元素 上一个是全局
# 等百度一下的按钮出来
driver = webdriver.Chrome()
url = "https://www.qq.com/"
driver.get(url)
# 需要导包
# from selenium.webdriver.support.ui import WebDriverWait
# from selenium.webdriver.support import expected_conditions as EC
# WebDriverWait(driver,5,0.5) 三个属性含义 绑定对象 超时 频率
# until 加条件 直到.....才..... 传递一个方法 判断方法是否达到 先定位到某一个元素
element = WebDriverWait(driver,5,0.5).until(EC.presence_of_element_located(By.ID,"kw"))
if element:
element.send_keys("输入")
else:
element.send_keys("不对")
driver.quit()
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)