You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Selenium WebDriver调用get(url)后页面跳回data:的问题求助

问题描述

目标URL:

url_TKLLPG_1 = 'https://truyenhdx.com/truyen/than-kiem-luu-lac-phap-gioi/chap/10323547-chuong-19/'

原代码实现每隔2秒自动刷新页面,之后定位并点击下一章按钮,代码如下:

def open_and_refresh_websiteVL(driver, url, interval_seconds, number_of_chapter = 0):
    try:
        driver.get(url)
        time.sleep(6)
        time.sleep(2)
    except ConnectionRefusedError:
        print(f'WebDriverException caught at {number_of_chapter}, url: {url}')
        driver.quit()
        new_driver = get_chrome_driver()
        open_and_refresh_websiteVL(new_driver, url, interval_seconds, number_of_chapter)
    except WebDriverException:
        driver.quit()
        return
    count = 0
    while(count<=2):
        time.sleep(interval_seconds)
        driver.refresh()
        time.sleep(interval_seconds)
        driver.refresh()
        time.sleep(interval_seconds)
        driver.refresh()
        time.sleep(interval_seconds)
        driver.refresh()
        time.sleep(interval_seconds)
        count+=1
    if(number_of_chapter > 80):
        driver.quit()
    if(driver.find_elements(By.XPATH, '//*[@id="html"]/body/div[5]/div/div/div[8]/div[3]/a')!=[]): 
        buttonNext = driver.find_element(By.XPATH, '//*[@id="html"]/body/div[5]/div/div/div[8]/div[3]/a').click()
    nexturl = driver.current_url
    open_and_refresh_websiteVL(driver,nexturl, interval_seconds, number_of_chapter+1)

ChromeDriver配置(基于反爬规避方案):

def get_chrome_driver():
    ua = UserAgent()
    user_agent = ua.random
    print(user_agent)
    chrome_options = webdriver.ChromeOptions()
    # 添加参数禁用AutomationControlled标识
    chrome_options.add_argument("--disable-blink-features=AutomationControlled") 
    # 排除enable-automation开关
    chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"]) 
    # 关闭userAutomationExtension
    chrome_options.add_experimental_option("useAutomationExtension", False) 
    chrome_options.add_argument(f'user-agent={user_agent}')
    driver = webdriver.Chrome(options=chrome_options, service=ChromeService(ChromeDriverManager().install()))
    return driver

调用方式:

refresh_interval = 2
driver = get_chrome_driver()
open_and_refresh_websiteVL(driver, url_TKLLPG_1, refresh_interval)

异常现象

此前代码运行正常,但现在执行driver.get(url)后,页面加载约1秒自动跳回data: URL。仅该网站出现此问题,其他网站代码正常,手动访问该网站无异常。

已尝试手段

  • 使用随机User-Agent
  • 添加反自动化标识的Chrome配置
  • 使用无任何配置的driver.get(url)
    问题依旧。

请问是代码存在问题,还是目标网站检测到了Selenium的使用?


分析与解决方案

这是目标网站升级了反爬检测,精准识别出了Selenium的自动化特征,和代码本身逻辑无关。

针对性解决建议:

  • 补充CDP指令隐藏更多痕迹:初始化driver后执行以下代码,覆盖浏览器的自动化识别特征:
    driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
        "source": """
            Object.defineProperty(navigator, 'webdriver', {
                get: () => undefined
            });
            Object.defineProperty(navigator, 'plugins', {
                get: () => [1, 2, 3, 4, 5]
            });
            Object.defineProperty(navigator, 'languages', {
                get: () => ['vi-VN', 'vi']
            });
        """
    })
    
  • 优化刷新逻辑:原代码短时间内连续4次刷新的操作完全不符合人类浏览习惯,极易触发检测。建议减少刷新次数,或设置1-3秒的随机间隔:
    import random
    # 替换固定sleep为随机值
    time.sleep(random.uniform(1,3))
    
  • 加载真实浏览器配置:导出你手动访问该网站时的Chrome配置文件,初始化driver时加载该配置,让自动化环境与真实环境一致:
    chrome_options.add_argument("--user-data-dir=/path/to/your/chrome/profile")
    
  • 改用undetected-chromedriver:该库专门针对反爬优化,能自动隐藏大部分Selenium特征,替换原有的ChromeDriver初始化逻辑即可。

内容的提问来源于stack exchange,提问作者Darkie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 21:42:44