BeautifulSoup, чтобы получить теги со стилем "дисплей: нет" - PullRequest
0 голосов
/ 25 февраля 2019

Я создаю сканер веб-страниц и обнаружил страницу со следующим не показанным тегом.

<div style="display:none; padding:3px 10px 5px;text-align:center;" id="dialogCookieInfo" title="taiwan high-speed rail" wicket:message="title=bookingdialog_3">
        <div class="JCon">
            <div class="TCon">
                <div class="overDiffText">
                    <div style="text-align: left;">
                        <span> for better user experiences, bla bla <a target="_blank" class="c" style="color:#FF9900;" href="https://www.thsrc.com.tw/tw/Article/ArticleContent/d1fa3bcb-a016-47e2-88c6-7b7cbed00ed5?tabIndex=1">privacy protection</a>。</span>
                    </div>
                </div>
                <div class="action">
                    <table border="0" cellpadding="0" cellspacing="0" align="center">
                      <tr>
                        <td>
                            <input hidefocus="" name="confirm" id="btn-confirm" type="button" class="button_main" value="我同意"/>
                        </td>
                      </tr>
                    </table>
                </div>
            </div>
        </div>
    </div>

Как обычно, этот тег должен отображаться при рендеринге и фактически перед всеми другими тегами.Он фактически скрывал все остальные теги для подтверждения или отмены ответа.Проблема в том, что beautifulsoup не возвращает этот тег в запросе моей программы должным образом.Beautifulsoup только что сказал, что этот тег имеет стиль «display: none» и не раскрывает другие атрибуты тега и его дочерние элементы.Но мне нужен этот тег, чтобы проверить, скрывает ли он все остальные теги.
Может кто-нибудь помочь мне ответить на следующие вопросы?

  1. как мне отобразить эти теги со стилем "display:никто" ?
  2. Есть ли лучший способ получить те теги, которые динамически затеняют все другие теги после рендеринга?
  3. Если этот тег скрывал все остальные теги, и я спрашивал, были ли включены другие теги, какие ответы даст веб-драйвер?

Действительно оцените все ответы.

1 Ответ

0 голосов
/ 25 февраля 2019

Не уверен, что это именно то, что вам нужно, но, надеюсь, это, по крайней мере, заставит вас двигаться в правильном направлении.Но вы можете перебирать теги <div> и проверять, есть ли у них атрибут style.Если у него есть атрибут «style», то вы можете проверить, есть ли «display: none».Когда они верны, вы можете делать с этими тегами все, что вам нужно.

html = '''<div style="display:none; padding:3px 10px 5px;text-align:center;" id="dialogCookieInfo" title="taiwan high-speed rail" wicket:message="title=bookingdialog_3">
        <div class="JCon">
            <div class="TCon">
                <div class="overDiffText">
                    <div style="text-align: left;">
                        <span> for better user experiences, bla bla <a target="_blank" class="c" style="color:#FF9900;" href="https://www.thsrc.com.tw/tw/Article/ArticleContent/d1fa3bcb-a016-47e2-88c6-7b7cbed00ed5?tabIndex=1">privacy protection</a>。</span>
                    </div>
                </div>
                <div class="action">
                    <table border="0" cellpadding="0" cellspacing="0" align="center">
                      <tr>
                        <td>
                            <input hidefocus="" name="confirm" id="btn-confirm" type="button" class="button_main" value="我同意"/>
                        </td>
                      </tr>
                    </table>
                </div>
            </div>
        </div>
    </div>'''



import bs4

soup = bs4.BeautifulSoup(html, 'html.parser')

div_display = soup.find_all('div')
for ele in div_display:
    try:
        ele['style']

        if 'display:none' in ele['style']:
            print ('Found "diplay:none"')
            # Do some stuff with this element
        else:
            print ('Did not find "diplay:none"')
    except:
        print ('Element did not have "style" attribute')

Вывод:

Found "diplay:none"
Element did not have "style" attribute
Element did not have "style" attribute
Element did not have "style" attribute
Did not find "diplay:none"
Element did not have "style" attribute
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...