案例以百度为例:
from selenium import webdriver
import time
path='./chromedriver.exe'
driver = webdriver.Chrome(executable_path=path)
url = 'https://www.baidu.com'
driver.get(url)
#js1执行操作是清除输入框的内容
js1="""
$("span > input#kw").val('');
"""
driver.execute_script(js1)
#js2为输入框赋值内容,无法为密码输入框赋值
js2="""
$("form>span > input#kw").val('python');
"""
driver.execute_script(js2)
#js3执行点击操作
js3="""
document.querySelector("form#form>span.bg.s_btn_wr>input#su").click()
"""
driver.execute_script(js3)
time.sleep(6)
#js4当有多个标签并列,并且想根据标签的text值进行定位时,可以先获取标签列表再进行判断,'文库'是传的参数
js4="""
var params = arguments[0];
var links=document.querySelectorAll("div#s_tab>div>a");
var lens=links.length;
for(var i=0;i<lens;i++){
console.log(links[i].text);
if(links[i].text==params){
console.log(links[i].text);
links[i].click();
break;
}
}"""
driver.execute_script(js4,'文库')
#js5点击 a:nth-child(7)表示a标签的第七个兄弟节点
js5="""
document.querySelector("div#s_tab>div>a:nth-child(7)").click();
"""
driver.execute_script(js5)
time.sleep(5)
#js6和js7功能相同,先创建一个script标签,然后为script标签赋值js内容,js函数内容需要写在一行或者用\在每行结尾隔开;实现js注入;js7是一个匿名函数,selenium默认会为js命令外面加上()变成匿名函数,所以js6和js7功能是一样的
js6="""
s = document.createElement('script');
s.textContent = 'function momo(){\
alert("lalala");\
console.log("lalala")};';
document.body.appendChild(s);
"""
js7="""
(function(){
s = document.createElement('script');
s.textContent = 'function momo(){alert("lalala");};';
document.body.appendChild(s);
})();
"""
driver.execute_script(js6)
driver.execute_script(js7)