Document对象是前端中非常核心的内容。UI自动化就是操作UI界面,也就是所谓的前端对象。在特殊的对象处理中,很可能在定位,操作上会因为selenium的限制,导致很难处理。就可以通过document对象来进行操作。
(1)在开发者工具Console中定位元素:document.getElementByID('kw')
Document提供的元素定位方式:
1.getElementByID(单元素定位)
2.getElementsByClassName(多元素定位)
3.getElementsByName(多元素定位)
4.getElementsByTagName(多元素定位)
5.getElementsByNameNS(多元素定位)
(2)在开发者工具Console中通过document修改元素的属性,或者添加删除属性
1.innerHTML(设置text文本):
document.getElementByID('kw').innerHTML='文本'
2.setAttribute(设置元素属性、添加元素属性和属性元素赋值):
document.getElementByID('kw').setAttribute('添加属性','属性赋值')
3.removeAttribute(移除指定属性): document.getElementByID('kw').removeAttribute('readonly')
readonly(true)为常见日期控件禁止输入,仅可读。
(3)在Selenium中提供有JS执行器的函数,专门用于执行JS脚本,当js执行需要获取结果以便后续调用,一定要在js中加上return。
from time import sleep
from selenium import webdriver
# 打开百度
driver = webdriver.Chrome()
driver.set_window_size(200, 400)
driver.get('http://www.baidu.com')
sleep(3)
# JS执行器一:滚动条
js = 'window.scrollTo(200,500)' # 聚焦在页面下侧合右侧的滚动条
driver.execute_script(js)
# JS执行器二:定位元素(加了s的查找元素,返回是list结果)
js1 = 'return document.getElementsByName("wd")'#有返回值时要加return
el=driver.execute_script(js1)
print(js1) #输出结果:[对象]
# JS执行器三:设置并获取文本元素
js2 = 'return document.getElementById("kw").innerHTML="虚竹"'
t = driver.execute_script(js2)
print(t) #输出结果:[虚竹]
# JS执行器四:Selenium+Document实现元素操作(selenium定位+js操作元素)
el = driver.find_element('link text', '新闻')
js3 = 'return arguments[0].innerHTML' # arguments[0] 可以直接理解为是占位符
t=driver.execute_script(js3, el)
print(t) #输出结果:[新闻]
# JS执行器五:元素聚焦在页面
el = driver.find_element('link text', '新闻')
js4 = 'arguments[0].scrollIntoView()'
# js语句都是通过js执行器来进行注入
driver.execute_script(js4, el)