使用Java Selenium的JavascriptExecutor抓取页面内容出现省略号如何解决
问题根因
- 反爬机制识别:博彩类站点普遍部署了反自动化检测规则,Selenium默认启动的浏览器存在大量可被识别的特征(比如webdriver属性、特定UA标识等),站点检测到后会返回截断的、带占位省略号的半加载页面。
- 代码逻辑缺陷:你定义了自定义UA、FirefoxOptions配置,但初始化FirefoxDriver时没有传入options对象,所有配置完全未生效;同时路径未转义、缺少动态页面等待逻辑,页面还没完成异步渲染就开始提取内容,自然拿不到完整数据。
- WEBGL警告不影响业务:控制台输出的
WEBGL_debug_renderer_info弃用提示只是Firefox的API版本兼容警告,和内容获取失败无关联,无需单独处理。
修复后代码
import org.openqa.selenium.JavascriptExecutor; import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; import org.openqa.selenium.firefox.FirefoxOptions; import org.openqa.selenium.support.ui.WebDriverWait; import org.openqa.selenium.support.ui.ExpectedConditions; import org.openqa.selenium.By; import java.time.Duration; import java.util.concurrent.TimeUnit; public class Main { public static void main(String[] args){ FirefoxOptions options = new FirefoxOptions(); // 自定义UA String userAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36 OPR/60.0.3255.170"; // UA生效配置 options.addPreference("general.useragent.override", userAgent); // 屏蔽Selenium自动化特征 options.addPreference("dom.webdriver.enabled", false); options.addPreference("useAutomationExtension", false); options.addArguments("--disable-blink-features=AutomationControlled"); // 注意Windows路径反斜杠要转义 System.setProperty("webdriver.gecko.driver","C:\\Users\\dbondarenko\\IdeaProjects\\geckodriver.exe"); // 初始化时传入配置好的options WebDriver driver = new FirefoxDriver(options); JavascriptExecutor js = (JavascriptExecutor)driver; String baseUrl = "https://parimatch.com/ru/events/romania-iceland-6764586"; driver.get(baseUrl); driver.manage().window().maximize(); // 替换为显式等待,等待页面核心赛事区块加载完成,超时时间15秒可自行调整 WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(15)); // 下方选择器可替换为页面实际存在的核心元素选择器 wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector(".event-page"))); String DomainName = js.executeScript("return document.domain;").toString(); System.out.println("Domain name of the site = " + DomainName); String url = js.executeScript("return document.URL;").toString(); System.out.println("URL of the site = " + url); String TitleName = js.executeScript("return document.title;").toString(); System.out.println("Title of the page = " + TitleName); String innerText = js.executeScript(" return document.documentElement.innerText;").toString(); System.out.println("Inner text of the page = " + innerText); js.executeScript("window.location = 'http://parimatch.com'"); // 操作完成后关闭驱动 driver.quit(); } }
额外排查建议
- 如果调整后仍然返回不完整内容,可先调用截图方法保存页面截图,确认是否被站点跳转到人机验证页、IP封禁页,针对拦截场景再调整IP代理、Cookie携带等配置。
- 若站点使用第三方防护服务,可尝试添加
options.addArguments("--headless=new")启用无头模式,或升级geckodriver、Firefox到最新版本匹配站点的浏览器版本要求。
内容的提问来源于stack exchange,提问作者Dima Bondarenko
相关产品推荐
相关产品推荐

