Я пытаюсь получить исходный код страницы с селеном, но он не работает в санто - PullRequest
0 голосов
/ 05 июля 2019

целей: получить исходный код страницы динамической загрузки; метод: Ява + Селен + Gecokdriver; проблема: в винде все работает нормально. но когда я разверну его в Centos. результат не тот, который я ожидал;

Я пытался развернуть код искателя с локального компьютера на сервере centos7. (код отлично работает на моем компьютере.) но когда я развертываю его на сервере Centos и, конечно, перенастраиваю соответствующую информацию - firefox.bin + gecokdriver.sh. исходная страница, которую я получаю, выглядит как код страницы до того, как она будет отрисована.

// the page url I want
String url = "http://rd.huangpuqu.sh.cn/website/html/shprd/shprd_ztrd_cwh/List/list_1.htm"


// Crawler code 
public class MyCrawlerUtils {

    private static final AtomicLong counter = new AtomicLong();

    private static org.apache.log4j.Logger logger = Logger.getLogger(MyCrawlerUtils.class);

    public static Document getOriginalPage(String url) {
        // 设置浏览器使用的本地驱动
        String firefoxDriver = Global.getConfig("firefox.driver");
        System.setProperty("webdriver.gecko.driver",firefoxDriver); // 0.24.0 从配置文件中获取配置信息

        // 设置浏览器在本地的位置  如果是默认的安装位置,则不需要设置
        String firefoxExe = Global.getConfig("firefox.execute");
        System.setProperty("webdriver.firefox.bin", firefoxExe);


        FirefoxOptions options = new FirefoxOptions();
        options.addArguments("disable-infobars");
        options.addArguments("--headless");
        options.setHeadless(true);

        // 创建驱动对象;
        FirefoxDriver driver = new FirefoxDriver(options);

        // 向指定网址发送请求
        driver.get(url);

        // 等待一段时间
        try {
            Thread.sleep(3000); 
        } catch (InterruptedException e) {
            e.printStackTrace(); 
        }

        String pageSource = driver.getPageSource();
        logger.info("{{{"+pageSource+"}}}"); // !!! there I get something unexpected.
        Document document = Jsoup.parse(pageSource);


        logger.info("第"+counter.incrementAndGet()+"条数据,"+"页面URL:"+url);

        // 关闭驱动
        driver.quit();
        return document;
    }
}

Я ожидаю, что pageSource отображается так, чтобы я мог проанализировать необходимую информацию. как это: ! 您 , 下午 好! 2019 年 7 月 5 日 14:46:47 ...

но все, что я получаю, это (как необработанный код страницы):

 <html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <!--[if lt IE 9]><script r='m'>document.createElement("section")</script><![endif]-->
    </head>
<body>
<input 
    type="hidden" 
    id="__onload__" 
    name="qLsp0ZDBKQUw_70MRYeJh0bkMr.oUykkn2yj1KXRhPucI8hFjVeSpylsPEgk8gowdN0vGovDjIqFiTyyzVRJo44Js_zY9Bhwx9lUgTQJk8RZnIFQfdLRR4p7VLDx00SPA41uZw4PYM2VDSXuiOeF6KZLDZT2Jmkfn.E_KlSSYwq" 
    value="U17W7zqe6L3khRlEHvj1WG">


</body>
</html>

1 Ответ

0 голосов
/ 05 июля 2019

теперь это довольно глупо, но я заставляю код ждать дольше, затем я получил правильный pageSource. Просто измените "Thread.sleep (3000)" на "Thread.sleep (5000)", все будет работать нормально.

Обратите внимание, что при развертывании проекта в веб-среде необходимо учитывать задержку в сети. это общая проблема всех. большое спасибо ~

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...