selenium执行js代码

import time
from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get('https://www.12306.cn/index/')

# ----------------------------通过js代码修改元素的属性(元素的定位不用js做)--------------------
from_ele = driver.find_element(by=By.ID, value="fromStationText")
to_ele = driver.find_element(by=By.ID, value='toStationText')

# js代码
js = """
var fro_ele = arguments[0];
var to_ele = arguments[1];
fro_ele.value = '上海';
to_ele.value = '北京';
return '操作完了';
"""

# 执行js代码
res = driver.execute_script(js, from_ele, to_ele)
# 注:除了js参数,后面的参数都会被arguments所接收,arguments是一个数组,可以通过下标取值

print('js代码执行之后的返回值:', res)  # res的值就是return出来的"操作完了"


# -----------------------通过js来定位元素-------------------------------------
# 定位语句和在页面上通过console输入的语句相同(可以借此先检查定位语句是否有误)
js = """
var fro_ele =  document.getElementById('fromStationText');
return fro_ele;
"""

res = driver.execute_script(js)
print(res)  # res是return出来的定位到的元素

# 后续的操作和常规的一样
res.click()  # 点击一下始发站输入框(否则框中的提示语依然存在)
res.send_keys('广州')


# ---------------------通过js定位元素并修改元素属性当然也是可以的-------------------------
js = """
document.getElementById('fromStationText').value="深圳";
"""

# 分开写也可以
js1 = """
var to_ele =  document.getElementById('toStationText');
to_ele.value="长沙";
"""

driver.execute_script(js)
driver.execute_script(js1)

time.sleep(5)
driver.quit()

 

posted @ 2022-01-07 14:58  2orange  阅读(109)  评论(0编辑  收藏  举报