玩转selenium 教你怎么让selenium运行js代码
1、开始之前,我们必须要安装有selenium,不会装的请看引用经验,谢谢。
打开cmd命令提示符,pip show selenium
可见小编这里是selenium3.13,没错,我们这里就是以selenium3为例

2、我们所有代码以驱动IE浏览器为例,在此之前,请自行准备好IE浏览器驱动。没有的小伙伴可以在经验最下方给小编投票,留下邮箱,小编第一时间会给小伙伴发过去。
小编手里的是IEDriverServer 3.6.0.0 在IE8可完美运行
32位和64位的都有
OK,这里我们开始写代码
#-*- conding:utf8 -*-
from selenium import webdriver
#导入selenium中的webdriver
web = webdriver.Ie(".\IEDriverServer.exe")
#设置驱动程序路径
web.get("https://www.baidu.com")
#打开百度
如图

3、此时我们可以调用js的一段代码,例如就调用js的Window对象打印一句话"Selenium 执行完毕"
我们要用到的是Selenium库webdriver对象提供的execute_script方法
代码如图
web.execute_script("window.alert('Selenium执行完毕')")

4、运行代码,可以看到驱动器运行之后,打开了百度页面。
然后调用让js调用了window对象的alert方法,探出了一个对话框。如图

5、此时我们可以让可以让js去做一些事情,例如让js去获取某个页面元素的信息。然后再通过selenium返回给python
这里,我们就让selenium输入一些信息,然后我们通过js去获取这个信息。
这之前,我们还需要导入Selenium的一个模块。
即Keys模块
from selenium.webdriver.common.keys import Keys
#然后我们让selenium在百度的input标签内输入1个字符串(id为kw)
web.find_element_by_id("kw").send_keys("Hello")
#找到id位kw的元素,然后发送数据

6、最后,我们通过js获得该元素的value值。
js代码:
document.getElementById('kw').value;
我们用一个retu变量获取execute_script的返回值。
retu = web.execute_script("document.getElementById('kw').value;")
print(retu)
然后用print打印出
如图

7、运行结果却是retu为None,即说明没有返回值
这到底是怎么回事呢?
其实我们可以把js代码修改下,确定js代码获取到了id为kw元素的属性值。
代码修改如下。
retu = web.execute_script("a = document.getElementById('kw').value;window.alert(a)")
print(retu)
即我们用一个变量接收document.getElementById('kw').value信息,然后再通过弹对话框方式看看是否成功获取。
可见js代码是没问题的,问题就出在我们用execute_script运行js代码的时候,怎么把数据返回。



8、事实上,selenium并不是直接把代码嵌入到html文件中,而是以函数的方式。
这样就好办了。
既然是函数形式,我们只需要在js内加入return语句,返回我们想要的结果即可。
retu = web.execute_script("return document.getElementById('kw').value;")
print(retu)
快看,是不是成功获取到数据了呢?怎么样,学会没?点一波关注吧(*^__^*)


1、怎么关注?
在经验的右上角小编头像旁边点击关注,如图。

2、怎么点赞?
请在经验左侧点赞,如图。

3、怎么投票?
在经验的下方点击投票,如图。

4、如果觉得小编写的还不错,可以动动鼠标把它分享给您的朋友。
如何分享,鼠标移动到右下角第一个按钮上,在弹出的选项中进行分享,如图。
不尽感激。
