前言
目前在对淘宝进行数据爬取的时候都会碰到,登入时的滑块问题,无论是手动还是脚本都不成功。这里的很重要一个原因是很多的网站都对selenium做了反爬虫机制。接下来是笔者参考网上的网友们的方法亲自测试的一个方法,希望可以帮助到大家。注意这里使用的浏览器是Chrome。所以使用的驱动也是chromedriver
一,淘宝反扒js
在淘宝登入页面加载的js中,可以看到怎么一行代码,如下图:
上图的这一行代码就对selenium进行了检测。所以我们只需要修改驱动的改行代码就可以。
二,修改chromedriver.exe
vim chromedriver.exe
cdc_
通过键入/cdc_
并按下来搜索return
。- 按下启用编辑
a
。 - 删除任意数量的内容
$cdc_lasutopfhvcZLmcfl
并用等量字符替换已删除的内容。如果不这样做,chromedriver
将会失败。 - 完成编辑后,按
esc
。 - 要保存更改并退出,请键入
:wq!
并按return
。
完成上述步骤就可以了:下图是笔者的修改,就将最后一个字符l 改为 a
三,测试代码
注意下面代码的:chrome_option 以开发者模式,否则依然需要滑块
#!/usr/bin/env python # -*- coding: utf-8 -*- from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC chrome_option = webdriver.ChromeOptions() chrome_option.add_experimental_option('excludeSwitches', ['enable-automation']) # 以开发者模式 driver = webdriver.Chrome(options=chrome_option) wait = WebDriverWait(driver, 10) def search(): driver.get('https://www.taobao.com') try: search_input = wait.until( EC.presence_of_element_located((By.CSS_SELECTOR, '#q')) ) search_submit = wait.until( EC.presence_of_element_located((By.CSS_SELECTOR, '#J_TSearchForm > div.search-button > button')) ) finally: pass search_input.send_keys('美食'.decode('utf-8')) search_submit.click() login() def login(): try: login_before = wait.until( EC.presence_of_element_located((By.CSS_SELECTOR, '#J_QRCodeLogin > div.login-links > a.forget-pwd.J_Quick2Static')) ) login_before.click() username = wait.until( EC.presence_of_element_located((By.CSS_SELECTOR, '#TPL_username_1')) ) password = wait.until( EC.presence_of_element_located((By.CSS_SELECTOR, '#TPL_password_1')) ) username.send_keys('xxxxx') # 用户名 password.send_keys('xxxxx') # 密码 login_submit = wait.until( EC.presence_of_element_located((By.CSS_SELECTOR, '#J_SubmitStatic')) ) login_submit.click() finally: pass def main(): search() if __name__ == '__main__': main()