selenium问题记录

一、设置cookie技巧

selenium中,我们通常使用函数get_cookies()来得到当前driver的cookie值组,之所以说是组,是因为某些在大多数网站所得到的cookie值都有多个,所以我们通过函数get_cookies()得到的通常是一个列表,列表中的元素是字典。每一个字典为一组cookie值,其中包括namevalueexpiry等字段。

通常我们保存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()

这样就解决了这个问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值