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)


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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,406评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,732评论 3 393
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,711评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,380评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,432评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,301评论 1 301
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,145评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,008评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,443评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,649评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,795评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,501评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,119评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,731评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,865评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,899评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,724评论 2 354

推荐阅读更多精彩内容