硒的相对选择因子?

2024-10-05 13:16:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我想知道Selenium中是否有“相对”选择器,比如Scrapy中的ele.css选择器。例如,在Scrapy中,您可以这样做:

for li in response.css('ul.rows li p.result-info'):
    lnk = li.css('a::attr(href)').extract_first()
    prc = li.css('span.result-meta span.result-price::text').extract_first()
    sqf = li.css('span.result-meta span.housing::text').extract_first()
    loc = li.css('span.result-meta span.result-hood::text').extract_first()
    objct = {
        'lnk': lnk,
        'prc': prc,
    }
    if sqf:
        chunk = sqf.split()
        objct['sqf'] = chunk[len(chunk)-1]
    if loc:
        objct['loc'] = loc
    yield objct

在硒中能做这样的事情吗?

现在我一直在使用下面的代码,这显然会产生问题,因为路径不相关。比如说,我不是一次一件地把每件商品的所有细节(即价格、尺寸、a项的颜色、B项的价格、尺寸、颜色,然后是价格、尺寸、C项的颜色等等),而是卡住了?按如下代码为所有项目(即项目A、项目B和项目C的价格,然后项目A、项目B、项目C的大小)创建一个详细信息。在

^{pr2}$

一个HTML示例(以及我的意思示例)

<discoverable-card ng-repeat="campaign in campaigns track by campaign.clickthroughUrl" ng-click="cardClick()" gogo-test="card_1" lazy-load-image="true" discoverable="campaign" iggref="pica" class="ng-scope ng-isolate-scope"><div class="discoverableCard">
  <a in-view="$inview &amp;&amp; trackImpression()" ng-click="clickDiscoverable($event)" href="/projects/tastetro-spice-system-vegan/coming_soon/pica" gogo-test="card">
    <div class="discoverableCard-image lazyloaded" ng-class="{'lazyload': lazyLoadImage}" id="discoverableCard-image" data-bgset="https://c1.iggcdn.com/indiegogo-media-prod-cld/image/upload/c_fill,f_auto,h_273,w_273/cvuilsvvspmvmxhdynup.jpg" style="background-image: url(&quot;https://c1.iggcdn.com/indiegogo-media-prod-cld/image/upload/c_fill,f_auto,h_273,w_273/cvuilsvvspmvmxhdynup.jpg&quot;);">
    <picture style="display: none;"><source data-srcset="https://c1.iggcdn.com/indiegogo-media-prod-cld/image/upload/c_fill,f_auto,h_273,w_273/cvuilsvvspmvmxhdynup.jpg" sizes="273px" srcset="https://c1.iggcdn.com/indiegogo-media-prod-cld/image/upload/c_fill,f_auto,h_273,w_273/cvuilsvvspmvmxhdynup.jpg"><img alt="" class="lazyautosizes lazyloaded" data-sizes="auto" data-parent-fit="cover" sizes="273px"></picture></div>
    <div class="discoverableCard-body">
      <!-- ngIf: viewModel.isCampaign() --><div ng-if="viewModel.isCampaign()" class="discoverableCard-type discoverableCard-type--crowdfunding ng-scope">
           <span class="discoverableCard-type--crowdfundingLabel ng-binding" ng-bind="i18n.t('discoverable_card.type_label_campaign')">Funding</span>
           <!-- ngIf: !user && viewModel.isSaveForLaterCompatible() --><div user-auth-modal="" ng-if="!user &amp;&amp; viewModel.isSaveForLaterCompatible()" ng-click="toggleSavedForLater($event)" banner="i18n.t('discoverable_card.auth_modal_banner')" class="ng-scope ng-isolate-scope"><span class="campaignLoginModal" ng-click="openModal()" ng-transclude="">
             <span class="iggPopoverHtml ng-binding ng-scope ng-isolate-scope" ng-class="{ 'entreTooltip' : entre }" ng-bind-html="trustedHtml" igg-popover="" placement="top" aria-label="Save for later" role="img" aria-disabled="false" html="<svg><use xlink:href='#icon-icon-follow'></use></svg>"><svg><use xlink:href="#icon-icon-follow"></use></svg></span>
           </span><user-auth-modal banner="banner" status="status" class="ng-isolate-scope"></user-auth-modal></div><!-- end ngIf: !user && viewModel.isSaveForLaterCompatible() -->
           <!-- ngIf: user && viewModel.isSaveForLaterCompatible() && !viewModel.isSavedForLater() -->
           <!-- ngIf: user && viewModel.isSaveForLaterCompatible() && viewModel.isSavedForLater() -->
      </div><!-- end ngIf: viewModel.isCampaign() -->
      <!-- ngIf: viewModel.isProduct() -->
      <!-- ngIf: viewModel.isOffering() -->
      <div class="discoverableCard-title ng-binding discoverableCard-lineClamp2" ng-class="::viewModel.titleClampClass()" gogo-test="title" ng-bind="::viewModel.discoverable.title">TasteTro Spice System</div>
      <div class="discoverableCard-description ng-binding discoverableCard-lineClamp3" ng-class="viewModel.descriptionClampClass()" ng-bind="::viewModel.discoverable.tagline">An intelligent spice rack that delivers mouthwatering spice blends at the touch of a button.</div>
      <!-- ngIf: viewModel.isOffering() -->
      <div class="discoverableCard-category ng-binding" gogo-test="category" ng-click="clickCategory($event)" ng-bind="::viewModel.discoverable.category">Food &amp; Beverages</div>
      <!-- ngIf: viewModel.showCrowdFundingProgress() -->
      <!-- ngIf: viewModel.isStandardCampaign() -->
      <!-- ngIf: viewModel.isInDemandCampaign() -->
      <!-- ngIf: viewModel.isPreLaunchCampaign() --><div ng-if="viewModel.isPreLaunchCampaign()" class="discoverableCard-preLaunchBulletPoint ng-binding ng-scope" ng-bind="::viewModel.discoverable.bulletPoint">Register to get access to TasteTro's secret perks!</div><!-- end ngIf: viewModel.isPreLaunchCampaign() -->
      <!-- ngIf: viewModel.isPreLaunchCampaign() --><div ng-if="viewModel.isPreLaunchCampaign()" class="discoverableCard-LaunchingSoon ng-scope">
        <svg-icon icon="icon-rocket" class="ng-isolate-scope"><svg class="iconLaunchingRocket" aria-label="Rocket Icon" role="img" aria-disabled="false">
  <use xlink:href="#icon-rocket"></use>
</svg>
</svg-icon>
        <span class="discoverableCard-LaunchingSoonLabel ng-binding" ng-bind="::i18n.t('discoverable_card.launching_soon_label')">Launching Soon</span>
      </div><!-- end ngIf: viewModel.isPreLaunchCampaign() -->
      <!-- ngIf: viewModel.isProduct() -->
      <!-- ngIf: viewModel.isOffering() -->
    </div>
    <!-- ngIf: viewModel.isOffering() -->
  </a>
</div>
</discoverable-card>

在上面的例子中,我想做的是,比方说,选择discoverable-card(即discoverable_card = browser.find_elements(By.XPATH, '//discoverable-card'),然后再进行如下选择:dc_child = discoverable_card.find_elements(By.XPATH, 'relative/path/to/child')。在


Tags: 项目svgimagedivcardngclassicon
1条回答
网友
1楼 · 发布于 2024-10-05 13:16:54

您只需选择已定义元素的子/子元素,如下所示:

discoverable_cards = browser.find_elements(By.XPATH, '//discoverable-card')
for card in discoverable_cards:
    dc_child = card.find_element(By.XPATH, './relative/path/to/child')

注意,您应该在child(./)/子代(.//)定位器的开头指定点来指向当前的card元素

相关问题 更多 >

    热门问题