Как очистить невидимую часть HTML-кода - PullRequest
0 голосов
/ 25 октября 2019

Мне нужно почистить сайт https://e -mapa.net / Это катастрофические данные в Польше. Если быть точным, я хотел бы получить данные от элемента, помеченного идентификатором 'gfi_0'. Дело в том, что этот элемент не доступен сразу, а только после нажатия на любое место на карте. Ранее он даже не присутствовал в HTML-коде (эта часть отображается после клика). Ниже вы найдете эту часть HTML-кода.

<div style="position: absolute; left: 270px; top: 170px; width: 330px; height: 350px; background-image: url(&quot;application/system/pandora/images/window_back.jpg&quot;); border: 1px solid rgb(68, 68, 85); background-position: 0px 0px; background-repeat: repeat; border-radius: 5px; z-index: 100051; display: block;">
<div style="position: absolute; left: 6px; top: 0px; right: 24px; height: 22px; padding-top: 4px; cursor: move; overflow: hidden; font-family: tahoma; font-size: 14px; font-weight: bold; color: rgb(255, 255, 255);">Informacja&nbsp;o&nbsp;obiekcie</div>
<div style="position: absolute; inset: 26px 6px 6px; background-color: rgb(241, 244, 248); overflow: auto; border: 1px solid rgb(102, 102, 102); padding: 2px 5px 5px;">
<div style="position: relative;">
<div style="position: relative; height: 25px; background-color: rgb(204, 204, 204); margin: 6px 0px 4px; cursor: pointer;">
<div style="position: absolute; inset: 0px 24px 0px 0px;"></div>
<div style="position: absolute; top: 4px; left: 24px; font-size: 14px; font-weight: bold; color: rgb(51, 51, 51);">Ewidencja&nbsp;gruntów&nbsp;i&nbsp;budynków</div>
<div style="position: absolute; left: 7px; top: 2px; width: 16px; height: 16px; font-size: 16px; font-weight: bold; color: rgb(51, 51, 51); display: block;">+</div>
<div style="position: absolute; left: 7px; top: 2px; width: 16px; height: 16px; font-size: 16px; font-weight: bold; color: rgb(51, 51, 51); display: none;">-</div>
<div style="position: absolute; top: 4px; right: 5px; width: 16px; height: 16px; background-image: url(&quot;application/images/print.png&quot;); background-repeat: no-repeat; background-position: center center;"></div>
</div>
<div style="position: relative; display: none;" id="gfi_0">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>101102_2.0005.unknown</title>
<table style="color: #000; font-size: 11px;">
    <tbody>
<tr><td>Identyfikator działki</td><td>101102_2.0005.unknown</td></tr>
<tr><td>Województwo</td><td>Łódzkie</td></tr>
<tr><td>Powiat</td><td>Poddębicki</td></tr>
<tr><td>Gmina</td><td>Pęczniew</td></tr>
<tr><td>Obręb</td><td>Drużbin</td></tr>
<tr><td>Numer działki</td><td>unknown</td></tr>
<tr><td>KW</td><td>brak informacji</td></tr>
<tr><td>Data publikacji danych</td><td>2019-10-25</td></tr>
<tr><td>Informacje dodatkowe o działce</td><td>Organem odpowiedzialnym za dane ewidencji gruntów i budynków jest Starosta Powiatu (ustawa Prawo geodezyjne i kartograficzne art. 7d pkt 1, Dz.U. z 2019 r. poz. 725).</td></tr>
</tbody>
</table>
</div>
</div
</div>
<div class="closeWindowButton" style="top: 4px; right: 2px;"></div>
<div class="collapseWindowButton" style="right: 19px;"></div>
</div>

Я пытался

driver.get('https://e-mapa.net/')
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.ID, "gfi_0")))

или

WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.ID, "gfi_0")))

, но я получаю сообщение об ошибке, элемент не

можно найти помощь

1 Ответ

1 голос
/ 25 октября 2019

Боюсь, это не невидимая часть html, а просто часть, которой не существует, если вы не нажмете нужную точку на карте. Когда вы щелкаете по нему, внутренний javascript определяет, где вы щелкнули, и генерирует отдельный http-запрос к https://e -mapa.net / application / system / get_feature.php с передачей параметров вашего клика. Ответ выглядит следующим образом:

<body>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <title>301505_5.0001.846/1</title>
    </head>
    <table style="color: #000; font-size: 11px;">
        <tr>
            <td>Identyfikator działki</td>
            <td>301505_5.0001.846/1</td>
        </tr>
        <tr>
            <td>Województwo</td>
            <td>Wielkopolskie</td>
        </tr>
        <tr>
            <td>Powiat</td>
            <td>Nowotomyski</td>
        </tr>
        <tr>
            <td>Gmina</td>
            <td>Gmina Opalenica</td>
        </tr>
        <tr>
            <td>Obręb</td>
            <td>DAKOWY MOKRE</td>
        </tr>
        <tr>
            <td>Numer działki</td>
            <td>846/1</td>
        </tr>
        <tr>
            <td>KW</td>
            <td>brak informacji</td>
        </tr>
        <tr>
            <td>Data publikacji danych</td>
            <td>2019-10-24</td>
        </tr>
        <tr>
            <td>Informacje dodatkowe o działce</td>
            <td>Organem odpowiedzialnym za dane ewidencji gruntów i budynków jest Starosta Powiatu (ustawa Prawo
                geodezyjne i kartograficzne art. 7d pkt 1, Dz.U. z 2019 r. poz. 725).
            </td>
        </tr>
    </table>
</body>

, который анализируется и используется в качестве источника данных для нового узла DOM, который не существовал до щелчка.

Итак, короче говоря, вы должныщелкните где-нибудь в своем тесте, и тогда вы получите доступ к нужным вам данным.

...