如何在python3中替换非标准标签的属性?

时间:2018-08-27 01:04:57

标签: css regex python-3.x selenium

我有一些标签,如下所示,他们使用样式为“显示:无”的非标准标签。这些无法解析,因此我想将style="display: none;"替换为空字符串或style="display: inline;"

...
<section id="box3" class="nodisp_zero" style="display: none;">
    <h1 id="box_ttl3" style="display: none;"></h1>
    <img style="width: 100%; display: none;" id="box_img3" alt="box3" src="https://smtgvs.weathernews.jp/s/topics/img/dummy.png" class="lazy" data-original="https://smtgvs.weathernews.jp/s/topics/img/201808/201808220015_box_img3_A.jpg?1533975785">
    <figcaption id="box_caption3" style="display: none;"></figcaption>
    <div class="textarea clearfix">
        <h2 id="box_subttl3" style="display: none;"></h2>
        <div class="fontL" id="box_com3" style="display: none;"></div>
    </div>
</section>
...

我尝试使用此代码,但出现错误TypeError: 'NoneType' object is not callable,该怎么办?

driver.get(href)
soup_level2 = BeautifulSoup(driver.page_source, 'lxml')
soup_level2 = soup_level2.replace(r'display:\s*none', "")
images = soup_level2.find_all('img')

1 个答案:

答案 0 :(得分:0)

您可以这样删除样式属性:

from bs4 import BeautifulSoup

soup = BeautifulSoup(html_doc, 'html.parser')
for tag in soup.findAll(lambda tag:tag.has_attr('style')):
  tag["style"] = tag["style"].replace("display: none;", "")

Demo

或使用简单的正则表达式替换:

html_doc = re.sub(r"display:\s*none;?", "", html_doc, 0)

Demo


有几种使用wait for the content to be loaded使用硒的方法,例如

element_present = EC.presence_of_element_located((By.ID, 'element_id'))
    WebDriverWait(driver, timeout).until(element_present)