Selenium没有抓住所选元素,而是由Javascript加载的元素

时间:2017-02-17 11:32:49

标签: ruby selenium

我使用selenium来获取a标签的href属性。但我的代码并没有抓住" / pros / 52698281"正如它应该。

是因为我的代码错了还是因为某些javascript动态加载其他网址?他可以吗?

这是html:

        <article class="bi-bloc blocs clearfix  bi-pro visited" id="bi-bloc-014805042600000000C0001" data-pjtoggleclasshisto="{&quot;idbloc&quot;: {&quot;id_bloc&quot;: &quot;014805042600000000C0001&quot;, &quot;no_sequence&quot;: &quot;&quot; }, &quot;klass&quot;:&quot;visited&quot; }">
             <div class="zone-bi">
                 <a class="visible-phone mob-zone-pro pj-lb pj-link" data-pjsearchctx-sethref="" href="/pros/52698281" data-pjstats="{&quot;idTag&quot;:&quot;MOB-ZONE-PRO&quot;,&quot;pos&quot;:54,&quot;type_bi&quot;:&quot;pro&quot;,&quot;genreBloc&quot;:&quot;1&quot;,&quot;pjscript&quot;:&quot;xt_click({},'C','{%xtn2}','LR_BI::zone_identification::info{%pjstats.type_bi}::identification_pro','A');&quot;}">
                   <span class="not-visible">
                         XXXXXXXXXXX
                   </span>
                 </a>

我正在使用此代码来获取href属性:

elements = driver.find_elements(:css, "article.bi-bloc div.zone-bi a.visible-phone")
elements.each do |e|
    p e.attribute("href")
end

我认为这是javascript代码,动态加载另一个url(我的终端中的一个打印)。

<script type="text/javascript">
var pj_searchctx = {
    "1989516432": {
        "form": {
            "quoiqui": "climatisation",
            "ou": "paris-75",
            "proximite": 0
        },
        "search": {
            "technicalUrl":"/annuaire/chercherlespros?quoiqui=climatisation&ou=paris-75&idOu=L07505600&page=3&contexte=BupKFuSlIjbFtxi68rty83eKL16bkxx3e0d5jKAkSaA%3D&proximite=0&quoiQuiInterprete=climatisation",
            "breadcrumb": "Retour aux résultats",
            "stats": {
                "idTag": "VERS-LR-RESULTATS"
            }
        }
    }
};

知道我该怎么做吗?

1 个答案:

答案 0 :(得分:0)

由于您在CSS选择器中使用直接子项,请尝试使用此而不是您的(使用>):

"article.bi-bloc > div.zone-bi > a.visible-phone"

这更具体地匹配您要查找的元素。