首先要下载和谷歌对应版本的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条)