Selenium模拟登录淘宝,获取cookies给requests使⽤⽂章⽬录
前⾔
今天爬取淘宝商品图⽚,遇到登录拦截,看了淘宝的登录 url ⾥的请求参数,好多加密,果断放弃。
不过可以⽤selenium模拟登录,然后获取cookies给requests使⽤,开整。
代码
from selenium import webdriver
from selenium.webdriver.support import wait
from selenium.webdrivermon.by import By
import requests
kies import RequestsCookieJar
from fake_useragent import UserAgent
class SeleniumGetCookies:
def__init__(self, user, pwd):
self.user = user
self.pwd = pwd
ua = UserAgent()
headers ={
'User-Agent': ua.random
}
self.session = requests.Session()
self.session.headers.update(headers)
# 配置chrome,绕过淘宝的检测
option = webdriver.ChromeOptions()
# option.add_argument('--headless')    # ⽆头模式
option.add_experimental_option('excludeSwitches',['enable-automation'])
option.add_experimental_option('useAutomationExtension',False)
self.driver = webdriver.Chrome(options=option)
ute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument",{
"source":"""
Object.defineProperty(navigator, 'webdriver', {
get: () => undefined
})
"""
})
self.driver.maximize_window()
('www.taobao/?spm=a230r.1.0.0.2dbc56bcMjHM4u')
def login(self):
# 点击登录
wait.WebDriverWait(self.driver,5).until(
lambda x: x.find_element(By.CSS_SELECTOR,'.site-nav-sign > a'))
self.driver.find_element(By.CSS_SELECTOR,'.site-nav-sign > a').click()
# 输⼊账号密码登录
self.driver.find_element(By.CSS_SELECTOR,'#fm-login-id').send_keys(self.user)
self.driver.find_element(By.CSS_SELECTOR,'#fm-login-password').send_keys(self.pwd)
self.driver.find_element(By.CSS_SELECTOR,'.fm-btn > button').click()
# 检测是否登录成功
def inspect_login(self):
def inspect_login(self):
wait.WebDriverWait(self.driver,10).until(
lambda x: x.find_element(By.CSS_SELECTOR,'.site-nav-user > a'))
user = self.driver.find_element(By.CSS_SELECTOR,'.site-nav-user > a').text if user =='你的⽤户名':
print('登录成功')
return True
else:
print('登录失败')
return False
# 加载cookies给requests
def load_to_requests(self):
selenium_cookies = _cookies()
tmp_cookies = RequestsCookieJar()
for item in selenium_cookies:
tmp_cookies.set(item["name"], item["value"])
kies.update(tmp_cookies)
selenium获取cookiedef run(self):
self.login()
if self.inspect_login():
self.load_to_requests()
self.driver.close()
self.driver.quit()
return self.session
else:
# 这⾥可以加登陆失败后的处理
return False
总结
直接导⼊SeleniumGetCookies类,运⾏run()函数,获取session返回给爬⾍⽂件即可。全部代码看这⾥

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。