赞
踩
在selenium
中,我们通常使用函数get_cookies()
来得到当前driver的cookie值组,之所以说是组,是因为某些在大多数网站所得到的cookie值都有多个,所以我们通过函数get_cookies()
得到的通常是一个列表,列表中的元素是字典。每一个字典为一组cookie值,其中包括name
、value
、expiry
等字段。
通常我们保存cookie值是为了去绕过某些网站的账号密码检测,对某些页面实现免密访问,保存cookie值建议使用pickle
包来保存,它可以对列表字典这些类型用二进制的方式进行持久化保存,而不需要我们在做过多的处理。需要读取所保存的cookie值也非常的方便。示例如下:
# 读取cookie
def get_cookies():
with open('cookies.pickle', 'rb') as f:
cookies = pickle.load(f)
return cookies
# 保存cookie
def set_cookies():
cookies = browser.get_cookies()
with open('cookies.pickle', 'wb') as f:
pickle.dump(cookies, f)
另外一个需要注意的地方就是对某个请求添加cookie值,在selenium
中是通过add_cookie()
方法来设置cookie值,这个方法接收的参数为一个字典,也就意味着我们需要将cookie值一组一组的进行添加,我们以新浪微博为例,微博的某一组cookie值如下所示:
{
u'domain': u'.m.weibo.cn',
u'secure': False,
u'value': u'93490a',
u'expiry': 1598594266,
u'path': u'/',
u'httpOnly': False,
u'name': u'XSRF-TOKEN'
}
在调用add_cookie()
方法时需传入的字典即为这种结构,若我们要设置多组cookie值的话,就需要一个循环来处理,示例如下所示:
for item in cookies:
browser.add_cookie({
'domain': item['domain'],
'secure': item['secure'],
'value': item['value'],
'expiry': item['expiry'],
'path': item['path'],
'httpOnly': item['httpOnly'],
'name': item['name'],
})
我们使用selenium
库通常有两个原因,一个是它可以模拟JavaScript
的渲染过程,然后我们直接抓取渲染后的结果,另一个就是它支持模拟点击。
但我们有时候在模拟点击时可能会遇见下面的报错。
selenium.common.exceptions.ElementClickInterceptedException: Message: element click intercepted: … Other element would receive the click: …
这个错误的原因是我们将点击的哪个元素被其他元素在界面上遮挡了,无法点击到该元素,在搜索引擎的帮助下,我发现大家解决这个问题的方法基本上都是用send_key("\n")
去代替click()
函数,但我这样使用时并没有解决这个问题,后面我想了想我们可以通过js代码来控制窗口的滑动从而使我们将要点击的元素可见。因此我们可以通过execute_script()函数执行js代码来滑动浏览器窗口至元素可见后再使用动作链来实现模拟点击。代码如下:
browser.execute_script("arguments[0].scrollIntoView();", btn)
btn.click()
这样就解决了这个问题。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。