【问题标题】:scraping javascript content using selenium使用 selenium 抓取 javascript 内容
【发布时间】:2019-11-15 17:49:03
【问题描述】:

我正在尝试使用 selenium 和 geckodriver 从网站上抓取 javascript 内容,但我得到了任何数据。以下是javascript代码

<div _ngcontent-c2="" class="header-wrapper">
    <div _ngcontent-c2="" class="title">Suda Office</div>
    <div _ngcontent-c2="" class="update">Jul 05 11:07 AM</div>
</div>

<div _ngcontent-c2="">
    <div _ngcontent-c2="" class="item-row title-headers">
        <div _ngcontent-c2="" class="item-col head1">Route</div>
        <div _ngcontent-c2="" class="item-col head2">Destination</div>
        <div _ngcontent-c2="" class="item-col">
            <div _ngcontent-c2="" class="head3 head3-height">ETA</div>
        </div>
    </div>

    <div _ngcontent-c2="">
        <div _ngcontent-c2="" class="alternet-color">
            <div _ngcontent-c2="" class="item-row item-eta-row">
                <div _ngcontent-c2="" class="item-col eta-route">15 T</div>
                <div _ngcontent-c2="" class="item-col eta-destination">
                    <marquee _ngcontent-c2=""> Charbagh</marquee></div>
                <div _ngcontent-c2="" class="item-col eta-col">                
                    <div _ngcontent-c2="" class="eta-display-wrapper">
                        <div _ngcontent-c2="" class="display">
                            <span _ngcontent-c2="" class="space"></span>
                            <span _ngcontent-c2="" class="currentTiming">10 min</span>
                        </div>

                    </div>
                </div>
            </div>
        </div>
    </div>
</div>

我必须从上述 javascript 内容中获取 class="item-col eta-route"class="item-col eta-destination"class="currentTiming" 数据。我使用以下代码,但它没有在输出中显示任何内容

from selenium import webdriver
driver = webdriver.Firefox()
driver.get(url)
a = driver.find_elements_by_class_name("item-col eta-route")

但是a=[] 是输出。甚至d = driver.find_elements_by_class_name("currentTiming") 也会给出以下输出

[<selenium.webdriver.firefox.webelement.FirefoxWebElement (session="6b1f2344-8e8a-4f48-a29a-54610179d62f", element="38e7ce58-ea66-4461-bee7-f81ac414595b")>]

如何使用 selenium 从页面获得正确的输出?

【问题讨论】:

    标签: javascript python-2.7 selenium


    【解决方案1】:

    问题可能出在item-col eta-route 类名上。您的 HTML 中可能有数百个类似的类。

    你可以试试这个 css 选择器

    div[_ngcontent-c2][class='item-col eta-route'] 
    

    获得15 T值。

    引入 webdriver wait 将是提高脚本稳定性的好主意。

    wait = WebDriverWait(driver, 10)
    element = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div[_ngcontent-c2][class='item-col eta-route']")))
    print(element.text)  
    

    提取价值:

    marquee_text = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div[_ngcontent-c2][class='item-col eta-destination'] marquee")))
    print(marquee_text.text)    
    

    你需要导入这些:

    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC 
    

    【讨论】:

    • 如果有多个class="item-col eta-destination"怎么办?我会使用上面的代码得到所有这些吗?
    • 查看HTML dom结构中是否有多个条目,然后selenium会选择第一个元素。
    • 你可以使用这个css选择器div[_ngcontent-c2][class='item-col eta-destination'],如果有帮助请告诉我。
    猜你喜欢
    • 2020-03-27
    • 2019-11-05
    • 2016-09-15
    • 1970-01-01
    • 1970-01-01
    • 2019-08-14
    • 1970-01-01
    • 2016-08-15
    • 2021-03-07
    相关资源
    最近更新 更多