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

使用Selenium无法读取网页手机号码,请求技术支持(附代码)

解决JustDial页面无法读取手机号码的问题

嘿,我看你现在的代码只是完成了打开页面的基础步骤,但还没添加提取手机号的核心逻辑,再加上JustDial这类网站对手机号做了反爬保护(比如动态渲染、隐藏元素、需要触发交互才显示),这就是你拿不到号码的关键原因。下面给你一步步拆解解决方案:

1. 先搞定页面等待(避免元素未加载就查找)

JustDial的内容大多是动态加载的,直接查找元素很容易报错,必须用显式等待确保目标元素加载完成,比硬编码Thread.sleep()靠谱得多。

2. 应对JustDial的手机号反爬

大部分情况下,JustDial的手机号需要点击「Show Number」按钮才会显示,或者号码是通过JavaScript动态生成的。我们可以先尝试触发这个交互,再提取号码。

3. 完整可运行的示例代码

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import java.time.Duration;

public class JustDialPhoneScraper {
    public static void main(String[] args) {
        // 配置ChromeDriver路径
        System.setProperty("webdriver.chrome.driver", "C:\\Users\\cchauhan\\Downloads\\chromedriver_win32\\chromedriver.exe");
        WebDriver driver = new ChromeDriver();
        driver.manage().window().maximize();
        // 设置10秒的显式等待超时
        WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10));

        try {
            driver.navigate().to("https://www.justdial.com/Ahmedabad/Knife-Fork-Restaurant-Shah-E-Alam-Tollnaka-Opposite-Swaminarayan-College-Shah-Alam/079PXX79-XX79-170524174654-D3J2_BZDET?xid=QWhtZWRhYmFkIEFmZ2hhbmkgUmVz...");
            
            // 尝试点击「Show Number」按钮(如果存在)
            try {
                WebElement showBtn = wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//span[contains(text(), 'Show Number')]")));
                showBtn.click();
            } catch (Exception e) {
                System.out.println("未找到「Show Number」按钮,直接尝试提取号码");
            }

            // 等待手机号元素加载并提取文本
            WebElement phoneElement = wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//div[contains(@class, 'tel')]//a")));
            String phoneNumber = phoneElement.getText();
            System.out.println("提取到的手机号码:" + phoneNumber);

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 记得关闭浏览器释放资源
            driver.quit();
        }
    }
}

额外提醒

  • 如果上述方法还是拿不到号码,可能是JustDial用了更复杂的反爬(比如号码用canvas绘制或加密存储),这时候需要分析页面的JavaScript逻辑,找到号码生成的源头。
  • 一定要保证ChromeDriver版本和本地Chrome浏览器版本匹配,否则会出现兼容性报错。
  • 频繁爬取可能会被网站封禁IP,建议添加适当的延迟,或者使用代理IP分散请求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:38:24