DrissionPage在linux环境下无法显示cloudflare的真人验证

Author: chaksonCreated Jul 23, 2025Updated Apr 20, 2026

DrissionPage在linux环境下,不管是否是无头模式,都无法显示cloudflare的真人验证,一样的代码,Windows就可以。

代码:

import time
import logging
import os
from CloudflareBypasser import CloudflareBypasser
from DrissionPage import ChromiumPage, ChromiumOptions

logging.basicConfig(
    level=logging.INFO,
    format='%(asctime)s - %(levelname)s - %(message)s',
    handlers=[
        logging.StreamHandler(),
        logging.FileHandler('cloudflare_bypass.log', mode='w')
    ]
)

def get_chromium_options(browser_path: str, arguments: list) -> ChromiumOptions:
    options = ChromiumOptions().auto_port()
    options.set_paths(browser_path=browser_path)
    for argument in arguments:
        options.set_argument(argument)
    return options
	
def take_screenshot(driver: ChromiumPage, filename: str = "screenshot.png"):
    try:
        driver.get_screenshot(path=filename, full_page=True)
        logging.info(f"Screenshot saved as {filename}")
    except Exception as e:
        logging.error(f"Failed to take screenshot: {str(e)}")

def main():
    isHeadless = True
    if isHeadless:
        from pyvirtualdisplay import Display
        display = Display(visible=0, size=(1920, 1080))
        display.start()

    browser_path = os.getenv('CHROME_PATH', "/usr/bin/google-chrome")
    
    arguments = [
        "--no-sandbox",
        "-no-first-run",
        "-force-color-profile=srgb",
        "-metrics-recording-only",
        "-password-store=basic",
        "-use-mock-keychain",
        "-export-tagged-pdf",
        "-no-default-browser-check",
        "-disable-background-mode",
        "-enable-features=NetworkService,NetworkServiceInProcess,LoadCryptoTokenExtension,PermuteTLSExtensions",
        "-disable-features=FlashDeprecationWarning,EnablePasswordsAccountStorage",
        "-deny-permission-prompts",
        "-disable-gpu",
        "-accept-lang=en-US",
    ]

    options = get_chromium_options(browser_path, arguments)

    driver = ChromiumPage(addr_or_opts=options)
    try:
        logging.info('Navigating to the demo page.')
        driver.get('my url')

        driver.run_js("window.scrollTo(0, document.body.scrollHeight);")
        logging.info("Scrolled to the bottom of the page.")

        time.sleep(5)

        button = driver.ele('xpath://li/a')
        button.click()
        logging.info("Button clicked successfully!")
        
        time.sleep(5)
        
        button = driver.ele('xpath://button')
        button.click(20, 20)  # Click at coordinates (20, 20)
        logging.info("Clicked at (20, 20) on the page.")
        
        time.sleep(5)
        driver.run_js("document.getElementById('anchor_typea').scrollIntoView();")
        logging.info("Scrolled to the element with ID 'anchor_typea'.")
        
        time.sleep(20)

        logging.info("Enjoy the content!")
        logging.info("Title of the page: %s", driver.title)

        time.sleep(5)
        logging.info("take_screenshot 0!")
        take_screenshot(driver, "after_cf_bypass.png")
        logging.info("take_screenshot 1!")

    except Exception as e:
        logging.error("An error occurred: %s", str(e))
    finally:
        logging.info('Closing the browser.')
        driver.quit()
        if isHeadless:
            display.stop()

if __name__ == '__main__':
    main()

linux:

Image

windows:

Image