【问题标题】:Python get web page contents that have javascripts - maybe SeleniumPython获取具有javascripts的网页内容 - 也许是Selenium
【发布时间】:2016-11-19 12:29:30
【问题描述】:

我需要分析网页内容。页面有 javascrips。 你能建议比使用 Selenium 更好的方法吗?

如果不是: 在浏览器中加载的页面有元素:

<div class="js-container">    <table class="zebra" style="width: 100%;">
        <tbody><tr>
            <th>A</th>
            <th>B</th>
            <th>C</th>
        </tr>
            <tr>
                <td>A1</td>
                <td>A2</td>
                <td>
                    <a href="http://X" style="color: black">T1</a>
                </td>
            </tr>
            <tr>
                ....
            </tr>
....

我需要逐个元素地阅读表格。例如,我运行:

myList = myDriver.find_elements_by_class_name("js-container").

那么如何获取“js-container”对象的内部元素呢?

生成的 myList 唯一的元素是:print (myList[0]):

<selenium.webdriver.remote.webelement.WebElement (session="61238", element="{71293}")>

【问题讨论】:

    标签: javascript python html selenium


    【解决方案1】:

    也许你需要 BeautifulSoup - 喂它 Selenium driver.page_source。它是一个 python 工具,它可以基于网页构建树。 BeautifulSoup document

    【讨论】:

    • 是不是你想获取一个页面,加载时会改变,你需要结果页面?
    • 当我尝试使用 Selenium 时,我发现问题 stackoverflow.com/a/30103931/5359105 。尝试使用 browser.page_source 获取页面以将其传达给 BS。
    • @Ben Lee,看起来 browser.page_source 做到了。谢谢你。我徘徊为什么它没有被记录为硒的主要特征之一。
    【解决方案2】:

    Selenium 可以很好地做到这一点。

    tableDescendants = myDriver.find_elements_by_css_selector("table.zebra *")
    for tableDescendant in tableDescendants
        outer = tableDescendant.get_attribute("outerHTML")
        inner = tableDescendant.get_attribute("innerHTML")
        print outer[:outer.find(inner)]
    

    此代码获取TABLE 标记的所有后代,删除innerHTML 字符串开头之后的所有内容并打印结果。 outerHTML 包含元素本身和所有后代,innerHTML 仅包含后代。因此,要仅获取元素本身的 HTML,我们需要从 outerHTML 中删除 innerHTML

    【讨论】:

    • 谢谢。如何用空格指定表名?
    • 听起来你在问一个新问题。如果不是,请澄清您的要求。
    • 我的意思是如果不是 class="zebra",但例如class="斑马ver2"
    • CSS 选择器是去那里的方式。基本格式为&lt;tagname&gt;.&lt;classname1&gt;.&lt;classname2&gt;,例如table.zebra.ver2。查看这些资源:CSS Selector ReferenceCSS Selector Tips
    猜你喜欢
    • 1970-01-01
    • 2019-11-05
    • 2010-12-23
    • 1970-01-01
    • 1970-01-01
    • 2018-03-22
    • 2018-04-05
    • 2017-08-29
    • 1970-01-01
    相关资源
    最近更新 更多