1 保存cookie到文件中
cookies = selfbrowserget_cookies()
jsonCookies = jsondumps(cookies)
with open('cookiesjson', 'w') as f:
fwrite(jsonCookies)
2从文件中读取cookie
selfbrowserget(selfstart_url)
selfbrowserdelete_all_cookies()
with open('cookiesjson', 'r', encoding='utf-8') as f:
listCookies = jsonloads(fread())
for cookie in listCookies:
selfbrowseradd_cookie({
'domain': cookie['domain'],
'name':cookie['name'],
'value':cookie['value'],
'path':'/',
'expires':None
})
selfbrowserget(selftarget_url)
您好,要使Webdriver请求时带特定cookie,首先您需要获取这个特定cookie的值,可以使用现有的Webdriver API,比如getCookieValue()方法来获取。然后,您可以使用addCookie()方法将该cookie添加到Webdriver中,这样就可以在请求时带上这个特定的cookie了。此外,您还可以使用deleteCookie()方法来删除特定的cookie,以及使用getCookies()方法来获取所有cookie的列表。总之,使用Webdriver API可以很容易地实现您想要的功能。
public static void main(String[] args) {
SystemsetProperty("webdriverchromedriver", "D:/chromedriver_win32/chromedriverexe");
ChromeOptions Options = new ChromeOptions();
OptionsaddArguments("user-data-dir=C:\\Users\\happy\\AppData\\Local\\Google\\Chrome\\User Data");
WebDriver driver = new ChromeDriver(Options);
drivermanage()window()maximize();
// 窗口最大化
driverget(">
scrapyFormRequest
loginpy
class LoginSpider(scrapySpider):
name = 'login_spider'
start_urls = ['hincom'] def parse(self, response):
return [
scrapyFormRequestfrom_response(
response, # username和password要根据实际页面的表单的name字段进行修改
formdata={'username': 'your_username', 'password': 'your_password'},
callback=selfafter_login)] def after_login(self, response):
# 登录后的代码
pass123456789101112131415
selenium登录获取cookie
get_cookie_by_seleniumpy
import pickleimport timefrom selenium import webdriverdef get_cookies():
url = 'httestcom'
web_driver = webdriverChrome()
web_driverget(url)
username = web_driverfind_element_by_id('login-email')
usernamesend_keys('username')
password = web_driverfind_element_by_id('login-password')
passwordsend_keys('password')
login_button = web_driverfind_element_by_id('login-submit')
login_buttonclick()
timesleep(3)
cookies = web_driverget_cookies()
web_driverclose() return cookiesif __name__ == '__main__':
cookies = get_cookies()
pickledump(cookies, open('cookiespkl', 'wb'))12345678910111213141516171819202122232425
获取浏览器cookie(以Ubuntu的Firefox为例)
get_cookie_by_firefoxpy
import sqlite3import pickledef get_cookie_by_firefox():
cookie_path = '/home/name/mozilla/firefox/bqtvfe08default/cookiessqlite'
with sqlite3connect(cookie_path) as conn:
sql = 'select name,value from moz_cookies where baseDomain="testcom"'
cur = conncursor()
cookies = [{'name': name, 'value': value} for name, value in curexecute(sql)fetchall()] return cookiesif __name__ == '__main__':
cookies = get_cookie_from_firefox()
pickledump(cookies, open('cookiespkl', 'wb'))12345678910111213141516
scrapy使用获取后的cookie
cookies = pickleload(open('cookiespkl', 'rb'))yield scrapyRequest(url, cookies=cookies, callback=selfparse)12
requests使用获取后的cookie
cookies = pickleload(open('cookiespkl', 'rb'))
s = requestsSession()for cookie in cookies:
scookiesset(cookie['name'], cookie['value'])1234
selenium使用获取后的cookie
from selenium import webdriver
cookies = pickleload(open('cookiespkl', 'rb'))
w = webdriverChrome()# 直接添加cookie会报错,下面是一种解决方案,可能有更好的# -- start --wget('hwwtestcom')
wdelete_all_cookies()# -- end --for cookie in cookies:
wadd_cookie(cookie)
单选比较好 *** 作,先定位需要单选的某个元素,然后点击一下即可。
多选好像也比较容易,依次定位需要选择的元素,点击即可。
下拉框的 *** 作相对复杂一些,需要用到Select模块。
先导入该类
在select模块中有以下定位方法
测试页面
然后,再演示下拉框的不同选择的方式
Selenium打开一个页面之后,默认是在父页面进行 *** 作,此时如果这个页面还有子页面,想要获取子页面的节点元素信息则需要切换到子页面进行擦走,这时候switch_toframe()就来了。如果想回到父页面,用switch_toparent_frame()即可。
既然是模拟浏览器 *** 作,自然也就需要能模拟鼠标的一些 *** 作了,这里需要导入ActionChains 类。
左键
这个其实就是页面交互 *** 作中的点击click() *** 作。
右键
context_click()
在上述 *** 作中
双击
double_click()
drag_and_drop(source,target)拖拽 *** 作嘛,开始位置和结束位置需要被指定,这个常用于滑块类验证码的 *** 作之类。
selenium中的Keys()类提供了大部分的键盘 *** 作方法,通过send_keys()方法来模拟键盘上的按键。
引入Keys类
常见的键盘 *** 作
send_keys(KeysBACK_SPACE):删除键(BackSpace)
send_keys(KeysSPACE):空格键(Space)
send_keys(KeysTAB):制表键(TAB)
send_keys(KeysESCAPE):回退键(ESCAPE)
send_keys(KeysENTER):回车键(ENTER)
send_keys(KeysCONTRL,'a'):全选(Ctrl+A)
send_keys(KeysCONTRL,'c'):复制(Ctrl+C)
send_keys(KeysCONTRL,'x'):剪切(Ctrl+X)
send_keys(KeysCONTRL,'v'):粘贴(Ctrl+V)
send_keys(KeysF1):键盘F1
send_keys(KeysF12):键盘F12
实例 *** 作演示:
定位需要 *** 作的元素,然后 *** 作即可!
如果遇到使用ajax加载的网页,页面元素可能不是同时加载出来的,这个时候尝试在get方法执行完成时获取网页源代码可能并非浏览器完全加载完成的页面。所以,这种情况下需要设置延时等待一定时间,确保全部节点都加载出来。
等待有三种方式:强制等待、隐式等待和显式等待
1强制等待
直接timesleep(n)强制等待n秒,在执行get方法之后执行。
2隐式等待
implicitly_wait()设置等待时间,如果到时间有元素节点没有加载出来,就会抛出异常。
3 显式等待
设置一个等待时间和一个条件,在规定时间内,每隔一段时间查看下条件是否成立,如果成立那么程序就继续执行,否则就抛出一个超时异常。
WebDriverWait的参数说明:
WebDriverWait(driver,timeout,poll_frequency=05,ignored_exceptions=None)
driver: 浏览器驱动
timeout: 超时时间,等待的最长时间(同时要考虑隐性等待时间)
poll_frequency: 每次检测的间隔时间,默认是05秒
ignored_exceptions:超时后的异常信息,默认情况下抛出NoSuchElementException异常
until(method,message='')
method: 在等待期间,每隔一段时间调用这个传入的方法,直到返回值不是False
message: 如果超时,抛出TimeoutException,将message传入异常
until_not(method,message='')
until_not 与until相反,until是当某元素出现或什么条件成立则继续执行,until_not是当某元素消失或什么条件不成立则继续执行,参数也相同。
其他等待条件
还有一些 *** 作,比如下拉进度条,模拟javaScript,使用execute_script方法来实现。
在selenium使用过程中,还可以很方便对Cookie进行获取、添加与删除等 *** 作。
输出:
请参考下面的例子: #coding=utf-8 from selenium import webdriver import time driver = webdriverFirefox() driverget(">
以上就是关于python+seleniu如何记录cookies全部的内容,包括:python+seleniu如何记录cookies、怎么使webdriver请求时带特定cookie、selenium怎么清除cookie等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)