WebUI之浏览器操作与元素相关操作—长篇

一、浏览器相关操作

(一)浏览器基本操作

  • page_source()        获取当前页面源码
  • close()        关闭当前窗口,如果当前窗口只有一个,那么将退出流浪器
  • quit()        退出浏览器
  • maximize_window()        最大化窗口
  • fullscreen_window()        全屏窗口
  • minimize_window()        最小化窗口
  • set_window_size(width, height, windowHandle='current')       设置窗口尺寸
  • get_window_size(windowHandle='current')       获取窗口尺寸,默认是当前窗口
  • set_window_position(x, y, windowHandle='current')设置窗口位置,基本用不上
  • back()        浏览器回退
  • forward()        浏览器前进
  • refresh()        浏览器刷新
  • implicitly_wait()       等待元素加载
  • set_page_load_timeout()       设置页面超时时间

(二)cookie相关

  • get_cookies()        获取cookie列表
  • get_cookie()        获取当前请求的cookie
  • delete_cookie()
  • delete_all_cookies()
  • add_cookie()


(三)窗口相关

  • current_window_handle()        获取当前窗口句柄
  • window_handles()        返回所有窗口句柄,列表形式,可通过索引访问与操作
  • switch_to        切换window、iframe,其他快淘汰的不列出了
    switch_to.window('窗口号')

(四)截屏相关操作

  • get_screenshot_as_file(filename)
    详细说明:
    driver.get_screenshot_as_file('笔趣阁.png'),没有加绝对路径,那么就是在当前运行的文件路径下;
    若存在当前路径的其他文件夹下,需要使用相对路径:driver.get_screenshot_as_file('./脚本文件/笔趣阁.png'),点号表示当前路径,后面的【脚本文件】是当前路径下的一个文件夹,【笔趣阁.png】表示文件名。通常,在使用时,我们都需要拼接路径与文件名,并与循环或者时间戳一起使用。

  • driver.save_screenshot('笔趣阁.png')

以上内容可以查看webdriver的源代码,自己手动长沙


相关代码

from selenium import webdriver
import time
#下面没有使用
from selenium.webdriver.support import expected_conditions as EC

driver=webdriver.Chrome()
driver.get('http://www.xbiquge.la/')
#设置等待元素出现时间,这是隐含的,是一个全局变量,针对所有的元素
driver.implicitly_wait(10)
#最大化窗口
driver.maximize_window()
#设置页面超时时间
# driver.set_page_load_timeout(10)
# driver.get_screenshot_as_file('./脚本文件/笔趣阁.png')
driver.save_screenshot('笔趣阁.png')

#打印当前窗口号
win_num1=driver.current_window_handle
print(win_num1)
driver.find_element_by_id('wd').send_keys('唐家三少')
js = "window.scrollTo(0,document.body.scrollHeight)"
driver.execute_script(js)
#使用sleep只是调试代码时观察用,实际用implicitly_wait
time.sleep(3)

#使用linktext查找元素点击没有弹出新的窗口,所有又改用xpath
# driver.find_element_by_link_text('全职法师').click()
driver.find_element_by_xpath('//*[@id="firendlink"]/a[2]').click()
#打印窗口句柄
print(driver.window_handles)
window_hands=driver.window_handles

#由于窗口句柄是按序号追加进列表的,所以使用索引访问更简单
driver.switch_to.window(window_hands[1])
title=driver.find_element_by_xpath('//*[@id="info"]/h1').text
print(title)
#断言,使用python自带的assert断言最好不要用,使用selenium的expected_conditions会更佳
assert title=="全职法师"

#打印浏览器的日志信息,基本用不上
print(driver.get_log('browser'))

driver.quit()

二、八大元素定位相关操作

(一)一般的简单操作

  • click点击元素
  • clear清除输入框内容(只有标签是input才能使用),若无法清除,可以使用按键组合清除
  • send_keys 输入字符串(也是模拟键盘操作的方法)
  • text获取元素的文本内容
from selenium.webdriver.support import expected_conditions as EC
import time
driver=webdriver.Chrome()
driver.get('https://www.baidu.com/')
driver.maximize_window()

#定位到百度首页的是设置,获取文本属性(注意:这里不要用link_text,因为不是链接)
element=driver.find_element_by_xpath('//*[@id="s-usersetting-top"]').text
print(element)
#定位输入框,输入字符串
driver.find_element_by_id('kw').send_keys('天天Python ')
#定位搜索按钮,并点击
driver.find_element_by_id('su').click()
#延时看效果
time.sleep(3)
#定位文本框,清除内容
driver.find_element_by_id('kw').clear()

(二)按键操作

使用按键操作必须先导入相关模块:
from selenium.webdriver.common.keys import Keys

相关常用按键列表:

普通键 F键
BACKSPACE F1
ENTER F2
SHIFT F3
ALT F4
CONTROL F5
SPACE F6
TAB F7

其他按键操作,可以导入之后使用ctrl加右击Keys进入,可以查看完整的按键列表

1. 单独按键操作

from selenium.webdriver.support import expected_conditions as EC
import time
from selenium.webdriver.common.keys import Keys

driver=webdriver.Chrome()
driver.get('https://www.baidu.com/')
driver.maximize_window()
#方法一:
# driver.find_element_by_id('kw').send_keys('天天Python ')
# driver.find_element_by_id('su').send_keys(Keys.ENTER)
#方法二:
driver.find_element_by_id('kw').send_keys('天天Python ',Keys.ENTER)

time.sleep(3)
driver.find_element_by_id('kw').clear()

2.常用组合按键操作

  • send_keys(Keys.CONTROL,'a')全选
  • send_keys(Keys.CONTROL,'c')复制
  • send_keys(Keys.CONTROL,'x')剪切
  • send_keys(Keys.CONTROL,'v')粘贴

按键操作用于某些网站的元素无法使用clear方法的场合

from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
import time
from selenium.webdriver.common.keys import Keys

driver=webdriver.Chrome()
driver.get('https://www.baidu.com/')
driver.maximize_window()
#方法一:
# driver.find_element_by_id('kw').send_keys('天天Python ')
# driver.find_element_by_id('su').send_keys(Keys.ENTER)
#方法二:
driver.find_element_by_id('kw').send_keys('天天Python ',Keys.ENTER)

time.sleep(3)
#组合按键清除,达到clear方法的目的
driver.find_element_by_id('kw').send_keys(Keys.CONTROL,'a')
driver.find_element_by_id('kw').send_keys(Keys.BACKSPACE)

(三)鼠标操作

导入相关模块

from selenium.webdriver.common.action_chains import ActionChains

from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
import time
from selenium.webdriver.common.action_chains import ActionChains

driver=webdriver.Chrome()
driver.get('https://www.baidu.com/')
driver.maximize_window()
element=driver.find_element_by_xpath('//*[@id="s-usersetting-top"]')
#此处很关键:需要实例化ActionChains,并添加浏览器;
# move_to_element需要接收一个定位到的元素
#最后需要执行一下动作perform(),不执行就会动
#下面是鼠标悬停操作
ActionChains(driver).move_to_element(element).perform()

"""
说明:使用ActionChains需要将元素使用变量接收,或者直接将定位的元素键入上面的element位置。
其他的点击,右击等操作只要替换move_to_element即可
"""

常用鼠标操作列表:

  • click()        单击左键(常用的点击操作)
  • double_click()        双击
  • context_click()        右击
  • drag_and_drop(source, target)        起始元素位置,要到的目标元素位置

需要更多操作:请查看源代码

三、JS相关操作

        关于JS的相关操作可以打开控制进行验证,可以在Python项目中加入相关代码,建议js只用于修改部分属性与获取输入框内的值

1.js在输入框输入值

import time
from selenium import webdriver

driver = webdriver.Chrome()
driver.get('https://www.baidu.com/')
#方法一:分开书写,顺序执行
# js_input='var js=document.querySelector("#kw");js.value="selenium"'
# js_button='document.querySelector("#su").click();'
# driver.execute_script(js_input,js_button)

#方法二:一起书写,顺序执行
#下面代码太长,使用了换行
js='var js=document.querySelector("#kw");js.value="selenium";' \
   'document.querySelector("#su").click();'
driver.execute_script(js)

time.sleep(3)
js_clear='document.querySelector("#kw").value="";'
driver.execute_script(js_clear)

2.js验证输入框内的值

注意:若需要返回值(在python中能看到),需要获取value的js代码前加return

import time
from selenium import webdriver

driver = webdriver.Chrome()
driver.get('https://www.baidu.com/')

js='var js=document.querySelector("#kw");js.value="selenium";' \
   'document.querySelector("#su").click();'
driver.execute_script(js)
#注意:若需要返回值(在python中能看到),需要加return
js2=' return document.querySelector("#kw").value'
value=driver.execute_script(js2)
print(value)

3.iframe内的js操作

import time
from selenium import webdriver

#执行js,如果有iframe,还是要先切换iframe,否则,js执行看不到结果
driver=webdriver.Chrome()
driver.get('https://www.126.com/')
driver.implicitly_wait(10)
time.sleep(3)
driver.switch_to.frame(0)
# driver.find_element_by_class_name('m-cnt').click()
#若存在很多不同的单双引号嵌套,记得加\转义
js1="document.querySelector(\"input[name='email']\")"
js2="document.querySelector(\"input[name='email']\").value='123'"
driver.execute_script(js2)


如有侵权,请联系我修改!人生很短,你我共勉,有用请点个赞!

你可能感兴趣的:(WebUI之浏览器操作与元素相关操作—长篇)