在爬取一些网站的数据的时候,用webdriver对页面进行操作时,总跳出登陆页面,并提示浏览器被监测。即不登录无法对商品数据进行大量抓取
解决办法:
-
利用驱动匹配ID自动化填补登陆信息,并点击登陆按钮。效果:被监测出使用驱动,弹出滑动验证条,失败
-
百度提供方法:使驱动拖动滑块自动验证。效果:在设置页面休眠十几秒进行手动模拟观测操作台显示滑动距离时,发现监测状态下,在滑块到达终点的情况下依旧无法进行验证,失败
-
思路:绕过登陆验证。百度提供方法:截取登录时的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菜鸟,多多指教
本文介绍了一种通过截取登录状态下的cookies并将其应用于自动化爬虫中,以绕过网站登陆验证的方法。具体步骤包括:使用selenium自动化工具清除浏览器cookies,设置休眠时间以便手动完成登录,然后获取已登录状态的cookies,最后将这些cookies添加到自动化爬虫中,从而实现绕过登陆验证的目的。
1136

被折叠的 条评论
为什么被折叠?



