利用cookies免登录
#手动登录保存cookies
from selenium import webdriver
import json,time
d.webdriver.Chrome()
d.implicitly_wait(15)
d.get('http://bilibili.com')
time.sleep(2)
input('输入任意继续...') #此时在浏览器里面手动登录
cookies = d.get_cookies()
jsoncookies = json.dumps(cookies) #转为json
with open('cookies','w') as f:
f.write(jsoncookies) #将内存数据写入磁盘
d.close()
#再次登录载入cookies
d.webdriver.Chrome()
d.implicitly_wait(15)
d.get('http://bilibili.com')
d.delete_all_cookies() #删除当前所有cookie
with open('cookies' ,'r' ,encoding = 'utf-8') as f:
listcookies = json.loads(f.read()) #读取磁盘文件保存的cookie数据
for cookie in listcookies: #添加cookie
d.add_cookies({
'domain': '.bilibili.com', #注:此处bilibili.com前,需要带点
'name': cookie['name'],
'value': cookie['value'],
'path': '/',
'expires': None
})
d.get('http://bilibili.com') #刷新网页,查看是否cookie添加成功
time.sleep(10)
d.close()
元素被挡着,无法被点击时
d.execute_script('arguments[0].click();', ele)
#arguments是类数组对象,包含了传递给函数的所有参数,虽然你可以通过arguments[n]去访问第N个参数
XPATH
/ #根目录
/.../... #绝对路径
//...//... #任意相对位置
./div #当前元素下的div直接子元素
//div/* #通配符
//*[@id = 'text'] #根据id属性选择
//div[@class = 'ab cd'] #根据class属性选择div标签,属性值一定写全(不同于css可以只写一个)
//*[contains(@style,'color')] #选择style属性值包含'color'一词的标签
//*[starts-with(@style,'color')] ##选择style属性值以'color'开头的标签
//div[2] #类型为div的子元素的第2个(不是:第2个子元素,并且是p类型 )
//div/*[2] #div标签的子元素中的第二个
//div[last()] #倒数第一个
//div[last()-1] #倒数第二个
//div[position()<3] #div标签的子元素中的前两个
//*[@class='text']/*[position()>=last()-2] #class属性值为text的标签 的 后三个 子元素
//a | //div #选择所有a元素和div元素
/.. #某元素的父节点
//*[@id='text']/.. #选择id为text的标签 的 父元素
/following:: #某元素的 后面的 兄弟节点
//*[@id='text']/following::div #选择id为text的标签 的 后面的 兄弟节点中的 所有div标签
/preceding-sibling:: #某元素的 前面的 兄弟节点
//*[@id='text']/preceding-sibling::* #选择id为text的标签 的 后面的 兄弟节点中的 所有标签
模拟滑块
ActionChains(broswer).click_and_hold(on_element = slider).perform()
ActionChains(broswer).move_by_offset(xoffset=258, yoffset=0).perform()
ActionChains(broswer).pause(0.5).release().perform()