js脚本执行
使用driver.execute_script(js,el)
执行脚本;传参只有js时,需要在js脚本中提前定位到元素;因js中提供的定位方法有限,推荐使用selenium先定位到元素;
from selenium import webdriver
driver = webdriver.Chrome()
driver.implicitly_wait(5)
driver.get('http://www.baidu.com')
el = driver.find_element('link text', '新闻')
#使用arguments[0]进行占位,固定写法,innerHTML相当于text的意思,arguments[0].innerHTML == el.text
js = 'arguments[0].innerHTML="kk独家新闻"'
driver.execute_script(js,el)
想要返回js中的结果 使用return
进行返回
#返回定位到的元素文本;
js = 'return arguments[0].innerHTML'
js常用脚本
1.removeAttribute("attribute_name") #移除元素中的某属性
2.setAttribute("attribute_name,value") #设置指定对象的指定属性和值
3.window.scrollTo(x,y) #操作滚动条,x表示横轴,横向滚动条;y表示纵轴,上下滚动条
4.arguments[0].scrollIntoView() #精确定位到元素,并聚焦在页面中显示
5.get_attribute('attribute_name') #获取元素指定属性值
js前端调试
在浏览器中可以使用document.getElementById()
等方法直接对元素进行简单的定位;
常用的方法有ById、ByName、ByClassName、ByTagName、ByTagNameNS
;
防反爬机制
# 通过修改webdriver属性为False,一定是在访问系统之前,在启动浏览器后第一步就是运行这个。
driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
"source": """
Object.defineProperty(navigator, 'webdriver', {
get: () => false
})
"""
})