利用cookies绕过登陆爬取网站数据

本文介绍了一种通过截取登录状态下的cookies并将其应用于自动化爬虫中,以绕过网站登陆验证的方法。具体步骤包括:使用selenium自动化工具清除浏览器cookies,设置休眠时间以便手动完成登录,然后获取已登录状态的cookies,最后将这些cookies添加到自动化爬虫中,从而实现绕过登陆验证的目的。

在爬取一些网站的数据的时候,用webdriver对页面进行操作时,总跳出登陆页面,并提示浏览器被监测。即不登录无法对商品数据进行大量抓取
解决办法:

  1. 利用驱动匹配ID自动化填补登陆信息,并点击登陆按钮。效果:被监测出使用驱动,弹出滑动验证条,失败

  2. 百度提供方法:使驱动拖动滑块自动验证。效果:在设置页面休眠十几秒进行手动模拟观测操作台显示滑动距离时,发现监测状态下,在滑块到达终点的情况下依旧无法进行验证,失败

  3. 思路:绕过登陆验证。百度提供方法:截取登录时的cookies替换浏览器的cookies,伪装已经登录,绕过登陆。难题:需事先获取登录后的cookies,不过目前无法进行自动登陆。方法:进入登陆页面,设置休眠sleep(20)后才获取页面cookies,在休眠期间使用手机淘宝APP扫码登陆,则结束休眠时恰好能获取到登陆后的cookies。保存cookies。

步骤如下:

3.1 编写代码实现:

import time
from selenium import webdriver

driver = webdriver.Chrome()
driver.get('https://login.taobao.com/member/login.jhtml?spm=a21bo.2017.754894437.1.5af911d92lvtM6&f=top&redirectURL=https%3A%2F%2Fwww.taobao.com%2F')
driver.maximize_window()

print(driver.title)
driver.delete_all_cookies()
time.sleep(30) 
print(driver.get_cookies())  #休眠30秒后获取网页cookies
time.sleep(20)
driver.quit()

3.2 在休眠期间抓紧时间用手机客户端扫码登陆:

3.3 成功获取cookies:

测试:用获取的登陆cookies进行测试:

from selenium.webdriver.common.keys import Keys
import time
from selenium import webdriver

print('实现模拟登陆')

def taobao_login(driver,goods):

    # cookies---------------------------------------------

    driver.delete_all_cookies()  #删除原有网页cookies

    time.sleep(1)

    print(driver.get_cookies())  #检空

    # 下面实现添加cookies绕过登陆
    cookies = [{cookies}] #截取的cookies(略)

    for i in cookies:
        driver.add_cookie(i)

    # 搜索框
    driver.find_element_by_id('q').clear()
    driver.find_element_by_id('q').send_keys(goods)

    # 查找
    driver.find_element_by_id('q').send_keys(Keys.ENTER)

    print(driver.get_cookies())

    return driver

#以下用于测试
if __name__ == '__main__':
    driver = webdriver.Chrome()  #指定所驱动浏览器
    driver.get('https://www.taobao.com')
    driver.maximize_window()
    print(driver.title)
    taobao_login(driver,'name')
    driver.quit()

显示用户名,并且能正常操作:

问题解决成功。

弊端:由于使用页面驱动,消耗大,页面获取响应时间较使用re和beautifulsoup获取页面慢很多
Ps:python菜鸟,多多指教

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大迪吃小迪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值