树莓派 + python + selenium

利用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()

 

你可能感兴趣的:(树莓派 + python + selenium)