首页 > 编程语言 > 详细

Selenium_执行JavaScript(11)

时间:2021-02-06 19:07:25      阅读:39      评论:0      收藏:0      [点我收藏+]

selenium执行JavaScript代码的方法有两种:

  1. 执行原生的JS代码
  2. 执行需格式化的JS代码

先简单写个html界面帮助演示

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <textarea id="kw" cols="30" rows="10"></textarea>
    <input type="text" name="" id="kw1">
    <br><br><br><br><br><br><br><br><br><br><br><br>
    <br><br><br><br><br><br><br><br><br><br><br><br>
    <br><br><br><br><br><br><br><br><br><br><br><br>
    <br><br><br><br><br><br><br><br><br><br><br><br>
    <div id="div">div标签</div>
    <button onclick="alt()" id="btn">按钮</button>
</body>
<script>
    function alt()
    {
        alert("我出来啦!!!");
    };
</script>
</html>

一、执行原生JS代码

这种方法是将所有操作全部交给js代码去实现,包括定位元素以及对元素的操作,因为原生JS定位元素有一定的局限性所以不是所有的元素都能使用该方法。

实现代码如下

from selenium import webdriver
import time

# 创建Chrome实例对象
driver = webdriver.Chrome()
# 打开浏览器并访问百度
driver.get("file:///C:/Users/41850/Desktop/test.html")
# 窗口最大化
driver.maximize_window()
time.sleep(2)

long_str = "超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超"              "长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长"              "内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容"              "超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长"              "内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内"              "容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容"              "超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超"              "长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长"              "内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内"              "容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容"              "超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容"

# 方法一:执行原生的JS代码
# 例1:向富文本插值
js = f"document.getElementById(‘kw‘).innerHTML=‘{long_str}‘;"
driver.execute_script(js)
time.sleep(1)

# 例2:向input框插值
js = fdocument.getElementById("kw1").value="selenium"
driver.execute_script(js)
time.sleep(1)

# 例3:滚动浏览器界面至指定元素
js = f"document.getElementById(‘div‘).scrollIntoView()"
driver.execute_script(js)
time.sleep(1)

# 例4:点击按钮
js = fdocument.getElementById("btn").click()
driver.execute_script(js)


# 关闭浏览器
# driver.quit()

二、执行需格式化的JS代码

第二种方法是先使用selenium定位元素,然后使用execute_script方法将传入的参数格式化成JS语句再执行,与第一种方法相比,更易用。

实现代码如下

from selenium import webdriver
import time

# 创建Chrome实例对象
driver = webdriver.Chrome()
# 打开浏览器并访问百度
driver.get("file:///C:/Users/41850/Desktop/test.html")
# 窗口最大化
driver.maximize_window()
time.sleep(2)

long_str = "超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超"              "长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长"              "内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容"              "超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长"              "内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内"              "容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容"              "超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超"              "长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长"              "内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内"              "容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容"              "超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容超长内容"

# 方法二:执行需格式化的JS代码
# 例1:向富文本插值
el = driver.find_element_by_id("kw")
js = f"arguments[0].innerHTML=‘{long_str}‘;"
driver.execute_script(js, el)
time.sleep(1)

# 例2:向input框插值
el = driver.find_element_by_id("kw1")
js = farguments[0].value="selenium"
driver.execute_script(js, el)
time.sleep(1)

# 例3:滚动浏览器界面至指定元素
el = driver.find_element_by_id("div")

js = f"arguments[0].scrollIntoView()"
driver.execute_script(js, el)
time.sleep(1)

# 例4:点击按钮
el = driver.find_element_by_id("btn")
js = farguments[0].click()
driver.execute_script(js, el)


# 关闭浏览器
# driver.quit()

 

Selenium_执行JavaScript(11)

原文:https://www.cnblogs.com/testlearn/p/14382337.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!