【问题标题】:Selecting a value from Dynamic List of Values using Selenium and Scrapy使用 Selenium 和 Scrapy 从动态值列表中选择一个值
【发布时间】:2019-08-05 18:24:35
【问题描述】:

我正在尝试抓取一个显示值列表的网站。我需要选择一个值并抓取,然后再选择另一个。我只是无法做到这一点,保存页面后,我看到值列表的以下代码:

<div class="dropdown-component spacing-left spacing-top">
<!-- ko component: { name: "dropdown-component", params: { value: categoryDropdown } } --><div class="btn-group" data-bind="attr: { &#39;data-id&#39;: id }" data-id="dropdown-component-118db170-aa45-43ac-94ee-8d78c72bda58">
    <button type="button" class="dropdown-toggle dropdown-component clear" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" data-bind="event: { keydown: onKeyDown }">
        <div class="table-dropdown">
            <div class="text">
                <span data-bind="i18n: labelKey, visible: labelKey">Category</span>
                <span data-bind="text: seperator, visible: seperator &amp;&amp; selectedOptionHasText()">:</span>
                <!-- ko if: selectedText() -->
                <span data-bind="text: selectedText">All</span>
                <!-- /ko -->
                <!-- ko if: selectedTextKey() --><!-- /ko -->
            </div>
            <div class="icon caret"></div>
        </div>
    </button>
    <ul class="dropdown-menu scrollable-dropdown" data-bind="foreach: options, css: css">

        <li data-bind="css: { highlighted: !isCategory &amp;&amp; id === $parent.highlightedOption() }, event: { mouseenter: $parent.onMouseEnter, mouseout: $parent.onMouseOut }" class="">
            <!-- ko if: isNoType -->
            <a data-bind="text: text, click: $parent.action.bind($index), i18n: textKey, &#39;i18n-options&#39;: textKeyReplacements">All</a>
            <!-- /ko -->
            <!-- ko if: isCategory --><!-- /ko -->
            <!-- ko if: isCategoryItem --><!-- /ko -->
        </li>

        <li data-bind="css: { highlighted: !isCategory &amp;&amp; id === $parent.highlightedOption() }, event: { mouseenter: $parent.onMouseEnter, mouseout: $parent.onMouseOut }" class="">
            <!-- ko if: isNoType -->
            <a data-bind="text: text, click: $parent.action.bind($index), i18n: textKey, &#39;i18n-options&#39;: textKeyReplacements">Not Classified</a>
            <!-- /ko -->
            <!-- ko if: isCategory --><!-- /ko -->
            <!-- ko if: isCategoryItem --><!-- /ko -->
        </li>

这表明 lov 具有分配给它的动态 id。知道如何从这个 lov 中选择值吗?它具有“全部”、“未分类”等值。

我已经能够通过以下方式解决这个问题

driver.find_element_by_xpath("//span[contains(.,'Category')]").click()
driver.execute(driver.find_element_by_xpath("//a[contains(text(),'Not Classofied')]").click())

这解决了我的问题,但我在 python 中收到错误消息:“KeyError: None”。

我不确定为什么会出现这个错误,但暂时我会通过 try-except 块忽略它。

【问题讨论】:

标签: python-3.x selenium-webdriver web-scraping scrapy selenium-chromedriver


【解决方案1】:

在 css 中你会得到:

.dropdown-menu.scrollable-dropdown li a

【讨论】:

  • 我以某种方式设法解决了这个问题,但仍然遇到了一个小问题。我所做的是记录使用 Selenium addin 到 firefox 的步骤。设法找到 lov 的 xpath:“//span[contains(.,'Category')]”。然后我在它上面使用了click函数,它基本上调用了lov的下拉菜单。接下来,我将 driver.execute 用作: driver.execute(driver.find_element_by_xpath("//a[contains(text(),'Not Classified')]").click()) 这非常有效,但我仍然收到一个python中的错误为:“KeyError:None”
  • @Sarah,你能提供你最新的包含硒代码的代码吗?
猜你喜欢
  • 1970-01-01
  • 2017-04-21
  • 2015-03-18
  • 2016-11-09
  • 1970-01-01
  • 1970-01-01
  • 2018-12-15
相关资源
最近更新 更多