selenium js 代码模拟百度

selenium   js 代码模拟百度,获取输入的值

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time

web = webdriver.Ie(r"C:\Program Files\internet explorer\IEDriverServer2.exe")  #设置驱动程序路径
# web = webdriver.Chrome()  #设置驱动程序路径
web.get("https://www.baidu.com")  # 打开百度
# web.execute_script("window.alert('Selenium执行完毕')")  # 调用js的Window对象打印一句话"Selenium 执行完毕"
web.find_element_by_id("kw").send_keys("Hello")  # 然后我们让selenium在百度的input标签内输入1个字符串(id为kw) 找到id位kw的元素,然后发送数据
retu = web.execute_script("document.getElementById('kw').value;")
print(retu)  # 获取的值为 None  因为我们要用一个弹框来接收这个值
# 即我们用一个变量接收document.getElementById('kw').value信息,然后再通过弹对话框方式看看是否成功获取。
# 可见js代码是没问题的,问题就出在我们用execute_script运行js代码的时候,怎么把数据返回。

# retu = web.execute_script("a = document.getElementById('kw').value;window.alert(a)")
# print(retu)

# 既然是函数形式,我们只需要在js内加入return语句,返回我们想要的结果即可。
# 获取输入的值   这个才是最终的版本
retu = web.execute_script("return document.getElementById('kw').value;")
print(retu)

参考链接: https://jingyan.baidu.com/article/020278112c5f421bcd9ce57d.html

这里面讲的相当详细,对于入门级别的来说,很实用

玩转selenium 教你怎么让selenium运行js代码

相信很多小伙伴在使用selenium驱动浏览器的时候都会遇到这样的问题:兼容性,例如我们使用selenium驱动IE打开某个网站的时候,我们想要点击按钮,此时却发现我们用click()方法是无效的,这时我们用send_keys(Keys.SPACE)或者send_keys(Keys.ENTER)却正常运行了,当我们遇到这样的情况,一旦更换了浏览器,可能就失效了。

就是因为这样的问题,其实还有第三种解决方案,不用click()或者send_keys()发送按键,那就是调用JavaScript的代码,直接调用按钮被点击后调用的js函数。

下面小编就教大家怎么用selenium运行js代码。

4玩转selenium 不会安装selenium怎么办(Python)

玩转selenium 教你怎么让selenium运行js代码

工具/原料

  • python3 for windows

  • selenium

方法/步骤

  1. 开始之前,我们必须要安装有selenium,不会装的请看引用经验,谢谢。

    打开cmd命令提示符,pip show selenium

    可见小编这里是selenium3.13,没错,我们这里就是以selenium3为例

    玩转selenium 教你怎么让selenium运行js代码

  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")

    #打开百度

    如图

    玩转selenium 教你怎么让selenium运行js代码

  3. 此时我们可以调用js的一段代码,例如就调用js的Window对象打印一句话"Selenium 执行完毕"

    我们要用到的是Selenium库webdriver对象提供的execute_script方法

    代码如图

    web.execute_script("window.alert('Selenium执行完毕')")

    玩转selenium 教你怎么让selenium运行js代码

  4. 运行代码,可以看到驱动器运行之后,打开了百度页面。

    然后调用让js调用了window对象的alert方法,探出了一个对话框。如图

    玩转selenium 教你怎么让selenium运行js代码

  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的元素,然后发送数据

    玩转selenium 教你怎么让selenium运行js代码

  6. 最后,我们通过js获得该元素的value值。

    js代码:

    document.getElementById('kw').value;

    我们用一个retu变量获取execute_script的返回值。

    retu = web.execute_script("document.getElementById('kw').value;")

    print(retu)

    然后用print打印出

    如图

    玩转selenium 教你怎么让selenium运行js代码

  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代码的时候,怎么把数据返回。

    玩转selenium 教你怎么让selenium运行js代码

    玩转selenium 教你怎么让selenium运行js代码

    玩转selenium 教你怎么让selenium运行js代码

  8. 事实上,selenium并不是直接把代码嵌入到html文件中,而是以函数的方式。

    这样就好办了。

    既然是函数形式,我们只需要在js内加入return语句,返回我们想要的结果即可。

    retu = web.execute_script("return document.getElementById('kw').value;")

    print(retu)

    快看,是不是成功获取到数据了呢?怎么样,学会没?点一波关注吧(*^__^*) 

    玩转selenium 教你怎么让selenium运行js代码

    玩转selenium 教你怎么让selenium运行js代码

猜你喜欢

转载自blog.csdn.net/chang995196962/article/details/84646788