如何抓取HTML代码的不可见部分

时间:2019-10-25 10:22:10

标签: python html selenium web-scraping html-table

我需要抓取网站https://e-mapa.net/,这是波兰的灾难记录。确切地说,我想从ID为'gfi_0'的元素中获取数据。问题是该元素不能一次访问,而只能在单击地图上的任何位置后才能访问。之前它甚至没有出现在html代码中(此部分显示点击后)。您可以在下面找到html代码的这一部分。

int

我尝试过

<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")))

但出现错误,无法找到该元素

请帮助

1 个答案:

答案 0 :(得分:1)

恐怕这不是html的不可见部分,而只是不存在的部分,除非您在地图上单击所需的点。当您单击它时,内部javascript会检测到您单击的位置,并通过传递您的单击参数来向https://e-mapa.net/application/system/get_feature.php生成单独的http请求。响应如下所示:

<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节点的数据源。

因此,简而言之,您必须在测试中单击某个位置,然后才能访问所需的数据。