【发布时间】: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: { 'data-id': 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 && 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 && 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, 'i18n-options': textKeyReplacements">All</a>
<!-- /ko -->
<!-- ko if: isCategory --><!-- /ko -->
<!-- ko if: isCategoryItem --><!-- /ko -->
</li>
<li data-bind="css: { highlighted: !isCategory && 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, 'i18n-options': 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 块忽略它。
【问题讨论】:
-
可以分享一下网址吗?
-
@Dev:抱歉,我不能分享网址。它是一个内部公司网站
标签: python-3.x selenium-webdriver web-scraping scrapy selenium-chromedriver