Cloudflare 小记

url:https://cn.airbusan.com/content/individual/?

 五秒盾打开后一般会出现这个页面,然后让你点击确认你是不是真人,点击成功后会跳往所访问的url页面。有时候不会出现这个点击  确认您是真人,会直接等待四五秒然后跳转。

会不会出现这个 确认你是真人的选项,则跟着浏览器的版本,ip质量,sele的驱动监测点等有关系。

 跳转主页面后则返回的几个cookie,其中cf_clearance最为重要,python单独拿出来cf_clearance请求就能请求成功。

需要注意的是,五秒盾绑定的是ip,请求头,与cookie,三者每次请求必须一致,少了,与别的串了,都会 出问题。

过无秒盾有很多种方法,一般是自动化工具做转发,或者直接硬刚逆了。

驱动下载地址为:CNPM Binaries Mirroricon-default.png?t=N2N8http://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
!![]等于true,大家可以打开F12-console-输入:!![]。 解析(+!![]+[]) []是一个array(数组),!在JavaScript中取反的意思。 !![]大概翻译过来就是取反二次后他还是true! 那么+!![]中的+在JavaScript中是自增的意思,true一般都是正数那么此时true不就是1了嘛? 那么继续解析[]他本来就是没值的,他就是一个空数组;在JavaScript中默认是一个空字符串 大家可以把他当一个空的字符串如果这个时候加1不就是等于1吗了? PS:这里的加1是前面的+!![]的1来加这个[]空字符串所以他才等于1! 大概的意思就是:1+0=1 懂了吧?那么我们来解析难一点的+((!+[]+!![]+!![]+[])+(!+[]+!![]+!![])) (!+[]+!![]+!![]+[])大概意思就是:(true+true+true+0); 还不懂?我给你转换成小学数学行吗?大概意思就是:(1+1+1+0)猜猜等于几? 复制到浏览器的Console中他是等于一个文本型!注意浏览器中的这个3是有双引号懂了吧? 继续解析(!+[]+!![]+!![]) 大概意思就是:(true+true+true)猜猜他等于几? 在浏览器中的Console上显示他是整数型! 那么得出((true+true+true+0)+(true+true+true))这个里面一个是整数型一个文本型有JavaScript基础都知道他是什么~那就是文本型的"33"不相信?你可以手动在浏览器中输入(!+[]+!![]+!![]+[])+(!+[]+!![]+!![])就知道啦~ 那么前面的+和第一个()括号是什么呢?他们相当于一个转换器就好像易语言中的到整数() 好了,关于cloudflare中的五秒防护中的jschl_answer值正确的解析出来啦~~~~ PS:另外说一句他这个jschl_answer值中的算法是随机,大家看我的源码中就知道啦~ PS:我把他们拼接起来然后计算值,也是非常的简单啦٩(๑>◡<๑)۶
根据提供的引用内容,以下是关于Java使用Cloudflare的介绍和示例: Cloudflare是一个提供CDN(内容分发网络)和安全性服务的公司。它的API允许开发人员通过编程方式Cloudflare进行交互,以管理其网站的各种设置和功能。 在Java中使用Cloudflare API,可以使用CloudflareApiLibrary来简化和加快开发过程。该库提供了一些方便的方法和功能,使得Cloudflare API的交互更加容易。 以下是一个使用CloudflareApiLibrary的示例,用于获取网站的DNS记录: ```java import com.cloudflare.api.CloudflareAccess; import com.cloudflare.api.constants.CloudflareValue; import com.cloudflare.api.requests.dns.DNSRecordCreateRequest; import com.cloudflare.api.requests.dns.DNSRecordGetRequest; import com.cloudflare.api.requests.dns.DNSRecordUpdateRequest;import com.cloudflare.api.results.CloudflareError; import com.cloudflare.api.results.CloudflareResponse; import com.cloudflare.api.results.DNSRecord; import com.cloudflare.api.results.Result; public class CloudflareExample { public static void main(String[] args) { // 设置Cloudflare API的访问密钥和邮箱 CloudflareAccess.getInstance().setAuthKey("YOUR_API_KEY"); CloudflareAccess.getInstance().setAuthEmail("YOUR_EMAIL"); // 获取网站的DNS记录 DNSRecordGetRequest getRequest = new DNSRecordGetRequest("YOUR_DOMAIN"); CloudflareResponse<Result<DNSRecord>> getResponse = getRequest.execute(); if (getResponse.isSuccess()) { Result<DNSRecord> result = getResponse.getResult(); for (DNSRecord record : result.getResult()) { System.out.println(record.getName() + " - " + record.getContent()); } } else { CloudflareError error = getResponse.getError(); System.out.println("Error: " + error.getMessage()); } } } ``` 这个示例演示了如何使用CloudflareApiLibrary来获取网站的DNS记录。首先,需要设置Cloudflare API的访问密钥和邮箱。然后,创建一个DNSRecordGetRequest对象,并指定要获取DNS记录的域名。最后,执行请求并处理响应,打印出每个DNS记录的名称和内容。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值