url:https://cn.airbusan.com/content/individual/?
五秒盾打开后一般会出现这个页面,然后让你点击确认你是不是真人,点击成功后会跳往所访问的url页面。有时候不会出现这个点击 确认您是真人,会直接等待四五秒然后跳转。
会不会出现这个 确认你是真人的选项,则跟着浏览器的版本,ip质量,sele的驱动监测点等有关系。
跳转主页面后则返回的几个cookie,其中cf_clearance最为重要,python单独拿出来cf_clearance请求就能请求成功。
需要注意的是,五秒盾绑定的是ip,请求头,与cookie,三者每次请求必须一致,少了,与别的串了,都会 出问题。
过无秒盾有很多种方法,一般是自动化工具做转发,或者直接硬刚逆了。
驱动下载地址为:CNPM Binaries Mirrorhttp://npm.taobao.org/mirrors/chromedriver/
大佬过无秒盾选择硬刚,菜鸡的我只能选择selenium 做转发。无秒盾的cookie有效期为半个小时,拿20分钟左右的代理ip用起来刚好。用redis做个消息队列,一个存,一个取,一般能达到数据量的要求。
import redis import time import json from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions # import undetected_chromedriver.v2 as uc import undetected_chromedriver as uc from seleniumwire import webdriver class get_sele_cookie(): def __init__(self): chrome_options = uc.ChromeOptions() chrome_options.add_argument("--disable-extensions") chrome_options.add_argument("--disable-popup-blocking") chrome_options.add_argument("--profile-directory=Default") chrome_options.add_argument("--ignore-certificate-errors") chrome_options.add_argument("--disable-plugins-discovery") chrome_options.add_argument("--incognito") chrome_options.add_argument('--no-first-run') chrome_options.add_argument('--no-service-autorun') chrome_options.add_argument('--no-default-browser-check') chrome_options.add_argument('--password-store=basic') chrome_options.add_argument('--no-sandbox') chrome_options.add_argument('--disable-gpu') chrome_options.add_argument(f'--proxy-server=http://222.90.3.70:4249') chrome_options.add_argument('--headless') # self.cf_clearance = None self.redisdb = redis.Redis(host='',port=7007,password='Szjz',db=5) self.driver = uc.Chrome(options=chrome_options, version_main=97, use_subprocess=True, executable_path="chromedriver.exe") def get_cookie(self, url): print(url) self.driver.get(url) time.sleep(7) if self.driver.find_element(By.XPATH, '/html/body/div[1]/div/div[1]/div/input'): self.driver.find_element(By.XPATH, '/html/body/div[1]/div/div[1]/div/input').click() userAgent = self.driver.execute_script("return navigator.userAgent") print(userAgent) time.sleep(5) cookies = self.driver.get_cookies() print(cookies) # time.sleep(500000) for i in cookies: if i.get('name') == 'cf_clearance': self.cf_clearance = i.get('value') return self.cf_clearance, userAgent def set_redis(self): for i in range(1): info = json.loads(self.redisdb.lpop('WU_cookies')) if time.time() - info[1]['time'] > 1200: continue else: self.redisdb.lpush('WU_cookies', json.dumps(info)) break def main(self,url): cf_clearance, userAgent = self.get_cookie(url) if self.redisdb.llen('WU_cookies') < 50: info = {'cf_clearance': cf_clearance, 'time': time.time()} self.redisdb.lpush('FD_cookies', json.dumps(info)) self.driver.close() # self.set_redis() if __name__ == '__main__': while 1: try: get_sele_cookie().main('https://cn.airbusan.com/') except: continue