• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
花儿爷
博客园    首页    新随笔    联系   管理     
2.操作浏览器

1.操作浏览器

 1 '''操作浏览器'''
 2 
 3 from selenium import webdriver      #从selenium里面的导入webdriver模块
 4 import time    #导入time模块
 5 
 6 driver = webdriver.Firefox()   #打开浏览器
 7 driver.get("http://www.baidu.com")         #打开访问的地址
 8 
 9 title=driver.title       #获取标题
10 print(title)
11 
12 time.sleep(3)      #设置等待时间3秒
13 driver.refresh()      #刷新页面
14 
15 driver.set_window_size(800,960)    #设置屏幕宽度和高度
16 time.sleep(3)
17 driver.maximize_window()     #屏幕最大化
18 driver.find_element_by_id("kw").send_keys(u"博客园花儿爷")    #id定位并输入内容
19 driver.find_element_by_id("su").click()      #点击事件
20 driver.back()      #上一页
21 time.sleep(3)
22 driver.forward()   #下一页
23 
24 driver.get_screenshot_as_file("C:\\Users\\12978\Desktop\\1r.jpg")     #截屏保存文件
25 
26 driver.close()    #关闭当前窗口
27 driver.quit()    #关闭浏览器'''

 

2.操作元素(鼠标、键盘事件)

1.鼠标操作元素

1.输入字符串,如果输入中文,前面加u:send_keys(u"上海")

2.点击事件: driver.find_element_by_id("su").click()

3.清楚输入框:clear()

4.回车键模拟提交表单:submit提交表单

 

2.模拟键盘事件

1.模拟键盘enter键使用submit()方法

driver.find_element_by_id("su").submit()

2.导入键盘模块

From selenium.webdriver.common.keys import Keys

3.模拟enter键

driver.find_element_by_id("su").send_keys(Keys.ENTER)

其他键盘操作如下:

键盘F1到F12: send_keys(Keys.F1) 把F1改成对应键 

复制Ctrl+C: send_keys(Keys.CONTROL,’C’)

粘贴Ctrl+V: send_keys(Keys.CONTROL,’V’)

全选Ctrl+A: send_keys(Keys.CONTROL,’A’)

剪切Ctrl+X: send_keys(Keys.CONTROL,’X’)

制表键Tab:send_keys(Keys.TAB)

 

'''模拟键盘操作'''
#从selenium里面的导入webdriver模块
from selenium import webdriver
from selenium.webdriver.common.keys import Keys      #键盘模拟模块
import time    #导入time模块

driver = webdriver.Firefox()
driver.get("http://www.baidu.com")
driver.find_element_by_id("kw").send_keys("python")    #id定位并输入内容
time.sleep(3)
driver.find_element_by_css_selector("#kw").send_keys(Keys.CONTROL,'a')     #键盘全选操作 Ctrl+A
driver.find_element_by_css_selector("#kw").send_keys(Keys.CONTROL,'c')      #键盘选择复制
driver.find_element_by_css_selector("#kw").send_keys(Keys.CONTROL,'x')      #键盘选择剪切

driver.get("http://www.sogou.com/")
time.sleep(3)

driver.find_element_by_css_selector(".sec-input").send_keys(Keys.CONTROL,'v')       #粘贴复制内容
time.sleep(2)

driver.find_element_by_css_selector("#stb").send_keys(Keys.ENTER)  #点击搜索按钮

time.sleep(3)
driver.quit()

 

3.鼠标悬停事件

1.鼠标不仅仅可以点击(click),鼠标还有其它的操作,如:鼠标悬停在某个元素上,鼠标右击,鼠标按住某个按钮拖到

 2.鼠标事件需要先导入模块:from selenium.webdriver.common.action_chains import ActionChains

perform() 执行所有ActionChains中的行为

move_to_element() 鼠标悬停

右击鼠标:context_click()

双击鼠标:double_click()

'''鼠标悬停'''
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains    #鼠标事件模块
from time import sleep
driver=webdriver.Firefox()

driver.get("http://www.baidu.com")
driver.maximize_window()

driver.find_element_by_css_selector("#kw").send_keys("Python")

# 获取搜索框元素对象
element=driver.find_element_by_css_selector("#kw")

sleep(3)

ActionChains(driver).double_click(element).perform()        #双击操作

sleep(2)


ActionChains(driver).context_click(element).perform()       #右击操作

sleep(3)

#鼠标悬停
mouse=driver.find_element_by_link_text("设置")
ActionChains(driver).move_to_element(mouse).perform()           #鼠标悬停执行action chains中的行为
driver.find_element_by_link_text("搜索设置").click()
sleep(4)

driver.quit()

 3.元素等待

概念

  • 显示等待是针对某一个元素进行相关等待判定;
  • 隐式等待不针对某一个元素进行等待,全局元素等待。
a.相关模块
  • WebDriverWait 显示等待针对元素必用
  • expected_conditions 预期条件类(里面包含方法可以调用,用于显示等待)
  • NoSuchElementException 用于隐式等待抛出异常
  • By 用于元素定位

from selenium import webdriver

from selenium.webdriver.common.by import By

from selenium.webdriver.support.ui import WebDriverWait     #注意字母大写

from selenium.webdriver.support import expected_conditions as EC

from selenium.common.exceptions import NoSuchElementException

 

'''元素等待'''
#显示等待
'''
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from time import sleep

driver=webdriver.Firefox()
driver.get("http://www.baidu.com")

driver.find_element_by_css_selector("#kw").send_keys("Selenium")
sleep(2)

element=WebDriverWait(driver,5,0.5).until(EC.presence_of_element_located((By.ID,"su")))    #显示等待--判断搜索按钮是否存在
element.click()
sleep(3)

driver.quit()
'''
#隐式等待
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
from time import sleep,ctime

driver=webdriver.Firefox()
driver.get("http://www.baidu.com")

sleep(2)

driver.implicitly_wait(5) #隐式等待时间设定 5秒

#检测搜索框是否存在
try:
    print(ctime())
    driver.find_element_by_css_selector("#kw").send_keys("Python")
    driver. find_element_by_css_selector("#su").click
except NoSuchElementException as msg:
    print(msg)
finally:
    print(ctime())

sleep(3)
driver.quit()

 4.多窗口切换

浏览器窗口的属性用句柄(handle)

from  selenium import webdriver
import time

webdriver=webdriver.Firefox()
webdriver.get("http://bj.ganji.com/")
time.sleep(2)

h = webdriver.current_window_handle   #获取当前页面的句柄
print(h)

webdriver.find_element_by_link_text("工作").click()
all_h=webdriver.window_handles
print(all_h)

#切换句柄
webdriver.switch_to_window(all_h[1])    #获取list里面第二个直接切换
print(webdriver.title)

webdriver.close()

webdriver.switch_to_window(h)      #切换首句柄
print(webdriver.title)

webdriver.quit()

 5.select下拉框定位

elect_by_index()  :通过索引定位

select_by_value()  :通过value值定位

select_by_visible_text() :通过文本值定位

deselect_all()          :取消所有选项

deselect_by_index()     :取消对应index选项

deselect_by_value()      :取消对应value选项

deselect_by_visible_text() :取消对应文本选项

first_selected_option()  :返回第一个选项

all_selected_options()   :返回所有的选项

 

'''select下拉框'''
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains    #鼠标事件模块
from selenium.webdriver.support.select import Select    #下拉框索引定位所需模块
from time import sleep

driver=webdriver.Firefox()
driver.get("http://www.baidu.com")
driver.implicitly_wait(20)

#鼠标悬停到百度的设置按钮上
mouse=driver.find_element_by_link_text("设置")
ActionChains(driver).move_to_element(mouse).perform()           #鼠标悬停执行action chains中的行为
driver.find_element_by_link_text("搜索设置").click()
sleep(4)
'''
#1.select框定位
#二次定位:分两步:先定位下拉框,在点击选项
s=driver.find_element_by_id("nr")
s.find_element_by_xpath("//option[@value='50']").click()

#driver.find_element_by_id("nr").find_element_by_xpath("//option[@value='50']").click()   #第二种写法,合并一步完成

#driver.find_element_by_xpath(".//*[@id='nr']/option[2]").click()   #自己写xpath一次定位,索引值从1算起

#2.select模块根据属性或者索引定位
s=driver.find_element_by_id("nr")  #通过索引,索引值从0算起
Select(s).select_by_index(2)

s=driver.find_element_by_id("nr")  #通过属性值定位
Select(s).select_by_value(20)
'''
s=driver.find_element_by_id("nr")  #通过text文本内容定位
Select(s).select_by_visible_text("每页显示50条")




#driver.quit()

 6.alert弹窗

text:获取文本值

accept() :点击"确认"

dismiss() :点击"取消"或者叉掉对话框

send_keys() :输入文本值 --仅限于prompt,在alert和confirm上没有输入框

'''alert\confirm\prompt'''
from selenium import webdriver
from time import sleep

url="C:\\Users\\12978\\Desktop\\alert.html"
driver=webdriver.Firefox()
driver.get(url)
sleep(4)

driver.find_element_by_id("alert").click()  #定位按钮
sleep(3)
t=driver.switch_to_alert()   #获取弹窗文本内容
print(t)

t.accept()   #点击弹框确认按钮
#t.dismiss()  #相当于x,取消
sleep(3)

 7.上传图片、文件

上传过程一般要打开一个系统的windows窗口,从窗口选择本地文件添加。所以一般会卡在如何操作本地window窗口。解决的方法很简单,只需要定位到上传按钮,然后通过send_keys添加本地文件路径即可

from selenium import webdriver
from time import sleep

driver=webdriver.Firefox()
driver.get("http://www.baidu.com")

driver.find_element_by_css_selector(".soutu-btn").click()
sleep(3)
driver.find_element_by_css_selector(".upload-pic").send_keys(r"C:\\Users\\12978\Pictures\\12.jpg")

#上传文件

#driver.find_element_by_xpath("//*[@type='file']").send_keys("D:\测试文档\绘本\单词.zip")
sleep(3) # driver.quit()

 8.滚动条

 

'''滚动条'''
from selenium import webdriver
from time import sleep

url="https://www.baidu.com/"
driver=webdriver.Firefox()
driver.get(url)
sleep(3)
driver.maximize_window()
driver.find_element_by_id("kw").send_keys(u"博客园花儿爷")    #id定位并输入内容
driver.find_element_by_id("su").click()
js="var action=document.documentElement.scrollTop=10000"
driver.execute_script(js)
sleep(2)

#将滚动条拖到最顶部
js="var action=document.documentElement.scrollTop=0"
driver.execute_script(js)
sleep(3)

driver.quit()

 9.日历控件

from selenium import webdriver
driver = webdriver.Firefox()
driver.get("https://kyfw.12306.cn/otn/index/init")
# 去掉元素的readonly属性
js = 'document.getElementById("train_date").removeAttribute("readonly");'
driver.execute_script(js)

# 用js方法输入日期
js_value = 'document.getElementById("train_date").value="2018-07-23"'
driver.execute_script(js_value)


# driver.find_element_by_id("train_date").clear()    # 清空文本后输入值
# driver.find_element_by_id("train_date").send_keys("2018-07-23")

 

posted on 2018-07-18 16:15  flowerszhao  阅读(130)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3