Я пытаюсь получить исходный код страницы с помощью Selenium, но я получил пустую страницу - PullRequest
1 голос
/ 11 июня 2019

Я пытаюсь получить исходный код страницы, используя Selenium, код SOP. это сработало для Baidu.com и example.com. но когда дело доходит до URL, который мне действительно нужен, я получаю пустую страницу. И в исходном коде ничего нет, кроме пустых тегов, подобных следующему коду. я что-то пропустил?

Я попытался добавить еще несколько параметров, но это не кажется полезным

Драйвер WebDriver;

    System.setProperty("webdriver.chrome.driver", "E:\\applications\\ChromeDriver\\chromedriver_win32 (2)//chromedriver.exe");

    // 实例化一个WebDriver的对象    作用:启动谷歌浏览器
    driver = new ChromeDriver();

    driver.manage().timeouts().implicitlyWait(2, TimeUnit.SECONDS);

    driver.get("http://rd.huangpuqu.sh.cn/website/html/shprd/shprd_tpxw/List/list_0.htm");
    String pageSource = driver.getPageSource();
    String title = driver.getTitle();
    System.out.println("==========="+title+"==============");
    System.out.println(Jsoup.parse(pageSource)); 

Я ожидаю, что проанализированный источник страницы URL, чтобы я мог получить необходимую информацию. но я застрял здесь.

Ответы [ 2 ]

1 голос
/ 12 июня 2019

Я мог воспроизвести проблему с этим сайтом при использовании ChromeDriver. Я обнаружил, что JS обнаруживает, что вы используете ChromeDriver, и блокирует запрос к веб-странице с кодом ошибки 400 HTTP:

enter image description here

Теперь Firefox работает, как и ожидалось, со следующим кодом:

    FirefoxDriver driver = new FirefoxDriver();

    driver.get("http://rd.huangpuqu.sh.cn/website/html/shprd/shprd_tpxw/List/list_0.htm");
    Thread.sleep(5000);
    String pageSource = driver.getPageSource();
    String title = driver.getTitle();
    System.out.println("==========="+title+"==============");
    System.out.println(Jsoup.parse(pageSource));

    driver.quit();

Я использовал только сон в течение 5 секунд, который работал. Лучше всего подождать, пока на вашей странице появится конкретный элемент, проверьте это для справки - Как дождаться появления элемента в Selenium?

версия браузера Firefox: 67.0.1 версия Geckodriver 0.24.0 селен: 3.141.59

0 голосов
/ 17 июня 2019

во-первых, это наверняка проблема совместимости.это в основном из-за селена - он прошел много разработок, поэтому множество проблем с совместимостью версий.Вот как я с этим справляюсь.

Я выбрал для управления браузер Firefox, версия - 67.0(64 bit). Cos Chrome ответит пустым результатом, как упомянул @Adi Ohana.и я использую Selenium с версией 3.X.чтобы использовать Selenium 3.X, я добавляю следующий код в pom.xml:

<dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-server</artifactId>
            <version>3.141.59</version> <!-- this version context matters -->
        </dependency>

обратите внимание, это <artifactId>selenium-server</artifactId>, вам нужно добавить в ваш pom.xml.otherwise, вы можете получить неожиданную ошибку.

с этим, вам нужен правильный драйвер. Драйвер для firefox с именем geckodriver. Я использую версию v0.24.0, это файл .exe, а не .jar, так что вы можете указать его с помощью кода Java вВаше программирование выглядит так:

System.setProperty("webdriver.gecko.driver","E:\\applications\\GeckoDriver-v0.24.0-win64\\geckodriver.exe"); // 0.24.0 the 2nd param is the location of geckodriver.exe in your local computer

, затем отправьте запрос на URL.and, так как содержимое тела загружается другим AJAX-запросом.вам нужно подождать пару секунд, пока Selenium сделает это.

Thread.sleep(5000); // this is the easyest way, may not the best though.

Вывод: я получаю исходный код, как и ожидал, но я не понимаю, почему googleDriver не может работать должным образом. Я могу уйтиэто для дальнейшего изучения.

Подводя итог: Firefox 67.0 geckodriver v0.24.0 [определено java-кодом] Selenium 3.X [добавлено xml-кодом]

спасибо за всеребята, это было действительно полезно.как это сообщество

PS: я новичок в использовании stackoverflow.still, изучая веревки ...

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