<html>
<head>
<title></title>
</head>
<body>
<span class="bg s_ipt_wr quickdelete-wrap">
<input id="kw" name="wd" class="s_ipt" value="" maxlength="255" autocomplete="off">
<a href="javascript:;" id="quickdelete" title="清空" class="quickdelete" style="top: 0px; right: 0px; display: none;" name="quickdelete"></a>
<span class="soutu-hover-tip" style="display: none;">按图片搜索</span></span>
</body>
</html>
通过ID定位
document.getElementById("id")
通过name定位
获取的是list,具体定位需要加上索引值
document.getElementsByNmae("name")
通过class定位
获取的是list,具体定位需要加上索引值
document.getElementsByClassName("className")
# 实例
from selenium import webdriver
class Test_javascript:
def test_js(self):
driver = webdriver.Chrome()
driver.maximize_window()
driver.get('https://www.baidu.com')
time.sleep(3)
js = "document.getElementsByClassName('pf')[0].textContent"
test = driver.execute_script(js)
# 通过document.getElementsByClassName('pf')[0].textContent获取文本
通过tag定位
获取的是list,具体定位需要加上索引值
document.getElementsByTagName("tag")
通过css定位
获取的是list,具体定位需要加上索引值
document.querySelecter("css Selector")
document.querySelectorAll("css Selector")
# 实例
from selenium import webdriver
class Test_javascript:
def test_js(self):
driver = webdriver.Chrome()
driver.maximize_window()
driver.get('https://www.baidu.com')
time.sleep(3)
js = "document.querySelector('#s-usersetting-top').textContent"
test = driver.execute_script(js)
# 通过document.querySelecter定位获取文本
常见执行js方式
javaScript中有个内置对象:arguments,arguments包含了函数调用的参数数组,[0]表示数组的第一个值
方式一:
js = "document.getElementsByClassName('pf')[0].textContent"
test = driver.execute_script(js)
方式二:
button = driver.find_element_by_css_selector("[name='tj_settingicon']")
driver.execute_script("arguments[0].click()", button)
常见js定位使用场景
浏览器窗口滚动
window.scrollTo(),用于设置浏览器滚动条的水平位置和垂直位置
js = "window.scrollTo(100, 500);"
driver.execute_script(js)
滚动到页面底部
driver.execute_script("window.scrollTo(0,document.body.scrollHeight)")
滚动到页面顶部
driver.execute_script("window.scrollTo(0, 0)")
元素聚焦:scrollintoView()
scrollintoView(false):与当前窗口底部对齐
scrollintoView(true):与当前窗口顶部对齐,默认
button = driver.find_element_by_css_selector("[name='tj_settingicon']")
driver.execute_script("arguments[0].scrollintoView()", button)
输入文本框:value
js = "document.getElementsByClassName('pf')[0].value("测试")"
test = driver.execute_script(js)
获取文本内容:textContent
js = "document.getElementsByClassName('pf')[0].textContent"
test = driver.execute_script(js)
点击事件:click
js = "document.getElementsByClassName('pf')[0].click()"
test = driver.execute_script(js)
时间控件操作
通过使用ActionChains类可以实现上下滑动选择日期,也可以通过TouchActions类实现,具体见如下:
使用TouchActions类中的scrollfrom_element()方法滑动元素,参数如下:
_on_element:滑动的元素
xoffset:x坐标
yoffset:y坐标
# 定位要滑动的年、月、日
downs = driver.find_element_by_id("id")
year= downs[0]
month= downs[1]
day = downs[2]
action = webdriver.TouchActions(driver)
action.scroll_from_element(year, 0, 5).perform()
action.scroll_from_element(month, 0, 30).perform()
action.scroll_from_element(day, 0, 30).perform()
视频播放
提供了JavaScript接口和多种方法和属性;currentSrc:返回当前音频、视频的URLload():控制视频的加载play():控制视频的播放pause():控制视频的暂停
video = driver.find_element_by_id("html3-api")
# 返回播放文件地址
url = driver.execute_script("return arguments[0].currentSrc;", video)
#播放视频
driver.execute_script("arguments[0].play()", video)
#播放时间
sleep(15)
# 暂停播放
driver.execute_script("arguments[0].pause", video)
滑动解锁
滑动解锁是目前比较流行的解锁方式,其实当我们单击滑块滑动,改变的只是CSS样式
click_and_hold():单击并按下鼠标左键
move_by_offest():移动鼠标,第一个参数为x坐标,第二个参数为y坐标
reset_action():重置action
dragger = driver.find_elements_by_class_name("slide-to-unlock-handle")[0]
action = ActionChains(driver)
action.click_and_hold(dragger).perform() #鼠标左键按下不放
for index in range(200):
try:
action.move_by_offset(2, 0).perform() # 平行移动鼠标
except UnexpectedAlertPresentException:
"""当解锁成功后会抛UnexpectedAlertPresentException异常,捕捉后跳出循环"""
break
action.reset_actions()
time.sleep(0.1)
window.scrollBy()
window.scrollBy(0,500) 向下滚动500个像素
window.scrollBy(0,-500) 向上滚动500个像素
window.scrollBy(500,0) 向右滚动500个像素
window.scrollBy(-500,0) 向左滚动500个像素