selenium怎么调用执行这两个js函数

JavaScript015

selenium怎么调用执行这两个js函数,第1张

调用js方法

execute_script(script, *args)

在当前窗口/框架 同步执行javaScript

脚本:JavaScript的执行。

*参数:适用任何JavaScript脚本。

使用:

driver.execute_script(‘document.title’)

使快播登陆用户名输入框标红显示:

#coding=utf-8

from selenium import webdriver

import time

driver = webdriver.Firefox()

driver.get("http://passport.kuaibo.com/login/?referrer=http%3A%2F%2Fvod.kuaibo.com%2F%3Ft%3Dhome")

#给用户名的输入框标红

js="var q=document.getElementById(\"user_name\")q.style.border=\"1px solid red\""

#调用js

driver.execute_script(js)

time.sleep(3)

driver.find_element_by_id("user_name").send_keys("username")

driver.find_element_by_id("user_pwd").send_keys("password")

driver.find_element_by_id("dl_an_submit").click()

time.sleep(3)

driver.quit()

js解释:

q=document.getElementById(\"user_name\")

元素q的id 为user_name

q.style.border=\"1px solid red\

元素q的样式,边框为1个像素红色

隐藏元素

js.html

<html>

<head>

<meta http-equiv="content-type" content="text/htmlcharset=utf-8" />

<title>js</title>

<script type="text/javascript" async="" src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>

<link href="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/css/bootstrap-combined.min.css" rel="stylesheet" />

<script type="text/javascript">

$(document).ready(function(){

$('#tooltip').tooltip({"placement": "right"})

})

</script>

</head>

<body>

<h3>js</h3>

<div class="row-fluid">

<div class="span6 well">

<a id="tooltip" href="#" data-toggle="tooltip" title=" selenium-webdriver(python)">hover to see tooltip</a>

<a class="btn">Button</a>

</div>

</div>

</body>

<script src="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/js/bootstrap.min.js"></script>

</html>

查看本栏目更多精彩内容:http://www.bianceng.cn/Programming/extra/

(保持html文件与执行脚本在同一目录下)

执行js一般有两种场景:

一种是在页面上直接执行JS

另一种是在某个已经定位的元素上执行JS

#coding=utf-8

from selenium import webdriver

import time,os

driver = webdriver.Firefox()

file_path = 'file:///' + os.path.abspath('js.html')

driver.get(file_path)

#######通过JS 隐藏选中的元素#########

#第一种方法:

driver.execute_script('$("#tooltip").fadeOut()')

time.sleep(5)

#第二种方法:

button = driver.find_element_by_class_name('btn')

driver.execute_script('$(arguments[0]).fadeOut()',button)

time.sleep(5)

driver.quit()

js解释:

arguments对象,它是调用对象的一个特殊属性,用来引用Arguments对象。Arugments对象就像数组。

fadeOut() 方法使用淡出效果来隐藏被选元素,假如该元素是隐藏的。

PhantomJS 和 Chromedriver操作方式以及功能一致

主要区别 PhantomJS 无界面模式 节省内存

Chromedriver 完全模仿浏览器 消耗内存

PhantomJS 截取的是网页的完整页面,包括下拉进度条的内容

Chromedriver只截取弹框浏览器的可视化内容页面

001 先找到文本输入框元素,输入内容

002 找到搜索按钮 进行搜索

给输入框赋值: element.send_keys()

操作点击事件: element.click()

find_element和find_elements的区别

带s的返回的是列表

不带s的是返回列表中的第一个元素

selenium处理cookie

页面等待 : https://www.jianshu.com/p/835bd3e96f5b

01 强制等待

time.sleep(10) 强制要求在时间内出现,否则报错,不能很好的控制时间,浪费资源

02 隐示等待

隐性等待对整个driver的周期都起作用,所以只要设置一次即可

隐形等待是设置了一个最长等待时间,如果在规定时间内网页加载完成,则执行下一步,否则一直等到时间截止,然后执行下一步。

driver.implicitly_wait(30) # 隐性等待,最长等30秒

03 显示等待

这里需要特别注意的是until或until_not中的可执行方法method参数,很多人传入了WebElement对象,如下:

这是错误的用法,这里的参数一定要是可以调用的,即这个对象一定有 call () 方法,否则会抛出异常:

TypeError: 'xxx' object is not callable

switch方法切换的操作

01窗口切换

iframe是html中常用的一种技术,即一个页面中嵌套了另一个网页,selenium默认是访问不了frame中的内容的,对应的解决思路是

思路:先定位并切换至iframe内,再进行你安排前元素操作 最后可通过切换至窗口,从iframe中切换出iframe 进入到页面

当你触发了某个事件之后,页面出现了弹窗提示,处理这个提示或者获取提示信息方法:driver.switch_to.alert() # 跟frame一样的处理方式!

页面前进和后退

selenium 三大重要功能

三个可以同时使用

selenium的优缺点

• selenium能够执行页面上的js,对于js渲染的数据和模拟登陆处理起来非常容易

• selenium由于在获取页面的过程中会发送很多请求,所以效率非常低,所以在很多时候需要酌情使用