如何利用selenium绕过cloudflare?
以下是我用python写的selenium代码
from selenium.webdriver.chrome.options import Options
from selenium import webdriver
import time
from selenium.webdriver.common.by import By
options = Options()
# options.add_argument("--headless")
options.add_argument("--disable-gpu")
options.add_argument('--no-sandbox') # 不启动沙盒,Bypass OS security model
options.add_argument('--disable-dev-shm-usage') # overcome limited resource problems
options.add_argument('--hide-scrollbars') # 隐藏滚动条, 应对一些特殊页面
options.page_load_strategy = 'eager'
options.add_experimental_option("excludeSwitches", ["enable-automation"]) # 反检测
options.add_experimental_option('useAutomationExtension', False)
options.add_argument("--disable-blink-features=AutomationControlled") # 防检测
options.add_experimental_option("detach", True) # 代码结束后不自动关闭浏览器
options.add_argument(
'--user-Agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36"') # chromedriver添加头的做法
options.add_argument(
"--Cookie=cookie_username=15971273124; JSESSIONID=AAA685F7FDEE475D3C9312E322DB4A53-n2; Hm_lvt_bed4e06c9c336e6fec0b7611aeefdc73=1681458156,1682507710; token=995kvhqTAUFQWUKpfvA4cA%3D%3D; utoken=mk%2BIhvPmGfu400Tc0VW1p6lud7SXDcnU; webSessionId=AAA685F7FDEE475D3C9312E322DB4A53-n2; Hm_lpvt_bed4e06c9c336e6fec0b7611aeefdc73=1682518020"
)
web = webdriver.Chrome(options=options)
with open('stealth.min.js', 'r') as f:
web.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
"source": f.read()
})
# 调用函数在页面加载前执行脚本
# options.add_argument('Cookie: "JSESSIONID=9CB7AA31A493C6B86D4A6631563F9421-n3; Hm_lvt_bed4e06c9c336e6fec0b7611aeefdc73=1681825648,1682036308,1682169651,1682347762; token=995kvhqTAUFQWUKpfvA4cA%3D%3D; utoken=mk%2BIhvPmGfu400Tc0VW1p6lud7SXDcnU; webSessionId=9CB7AA31A493C6B86D4A6631563F9421-n3; cookie_username=15971273124; Hm_lpvt_bed4e06c9c336e6fec0b7611aeefdc73=1682354460"')
# script = 'Object.defineProperty(navigator,"webdriver",{get:() => false,});'
# web.execute_cdp_cmd( "Page.addScriptToEvaluateOnNewDocument", {"source": """
# Object.defineProperty(navigator, 'webdriver', {get: () => [1, 2, 3] })"""},)
# web.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument",{"source": """
# Object.defineProperty(navigator, 'languages', {get: () => ['en-US', 'en']})"""},)
web.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument",{"source": """
Object.defineProperty(Notification, 'permission', { get: () => False});
"""},)
web.get("https://www.2bulu.com/track/t-%252FiQHDOTh2lDp%252FR2KBg5Tzw%253D%253D.htm#")
# 修改window.navigator.webdriver属性的值为undefined
# web.execute_script("Object.defineProperties(navigator,{webdriver:{get:()=>undefined}})")
load = web.find_element(By.CLASS_NAME,"btn_orange").click()
load1 = web.find_element(By.XPATH,'//*[@id="base_area"]/div[9]/ul/li[2]').click()
load2 = web.find_element(By.CLASS_NAME,'p2').click()
time.sleep(5)
check = web.find_element(By.XPATH,'//*[@id="challenge-stage"]/div/label/input').click()
我想要绕过的验证: