我正在尝试从Sellercentral.amazon.de下载几百个excel文件。如我之前的文章所述,手动下载不是一种选择,因为我需要单击几次才能下载弹出窗口。
为此,我正在使用Python和Selenium。
问题
但是,要抓取的网站不仅包含按钮和链接,还包含自定义标签。标签之一是“浏览节点组件”,每个标签代表一个产品(子)类别。找到它没什么大不了的,但是单击它不会执行。需要单击才能在类别中导航至其子级,直到到达叶节点为止。然后,图标从箭头变为“选择”(请参见imgur)。
到目前为止,我尝试过的代码是:
elements = driver.find_elements_by_tag_name("browse-node-component")
for element in elements:
print("starting")
# Store element name
browse_node = element.find_element_by_class_name("browse-node-text")
browse_node = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CLASS_NAME, "browse-node-text")))
browse_node_button = element.find_element_by_class_name("a-button-input")
print ("done")
browse_node_button.click()
示例性的“浏览节点组件”标签
<span>
<div class="a-section a-spacing-none browse-node selected-node" ng-class="(nodeCtrl.node.hasChildren ? 'browse-node' : 'leaf-node') + ' ' + (nodeCtrl.isSelected ? 'selected-node' : '')" ng-click="nodeCtrl.node.hasChildren && nodeCtrl.onBrowseChildren({node:nodeCtrl.node});">
<div class="browse-node-text ng-binding" style="">Auto & Motorrad</div>
<div class="node-icon-btn-block">
<img class="loading-icon ng-hide" src="https://m.media-amazon.com/images/G/01/abis-ui/loading-small._CB192205764_.gif" ng-show="nodeCtrl.isLoading">
<div class="lock-icon ng-hide" ng-show="nodeCtrl.isGated"></div>
<div class="a-icon arrow-right browse-node-arrow" ng-show="nodeCtrl.node.hasChildren"></div>
<div class="select-button-ungated ng-hide" ng-show="!nodeCtrl.isGated && !nodeCtrl.node.hasChildren" ng-click="nodeCtrl.onSelectNode({node:nodeCtrl.node})">
<span class="a-button a-button-base a-button-small select-button"><span class="a-button-inner"><input class="a-button-input" type="submit"><span class="a-button-text" aria-hidden="true">
Auswählen
</span></span></span>
</div>
<div class="gated-button ng-hide" ng-click="nodeCtrl.onRequestApproval({node:nodeCtrl.node})" ng-show="nodeCtrl.isGated && !nodeCtrl.node.hasChildren">
<span class="a-button a-button-primary a-button-small select-button"><span class="a-button-inner"><input class="a-button-input" type="submit"><span class="a-button-text" aria-hidden="true">
Freischaltung beantragen
</span></span></span>
</div>
</div>
</div>
<span>
</span></span></browse-node-component>
结果
最后的输出是“ done”,然后脚本终止,并显示以下消息:
Message: Element 'input class="a-button-input" type="submit"' could not be scrolled into view
但是我不确定我是否真的必须按下该按钮。我按的是对的吗?如果是这样,我该如何做而不会出错?
我想浏览这些类别,直到到达子节点,然后按它的选择按钮。但是我无法用我的代码显示顶级类别的子类别。请提示我必须单击哪个html元素。
有关图形信息,请参见此处:https://imgur.com/a/8eWGz8s
答案 0 :(得分:0)
尝试以下方法。
browse_node_button.location_once_scrolled_into_view
browse_node_button.click()
如果上述方法无效,则可能需要使用JS单击browse_node_button
driver.execute_script("arguments[0].click();", browse_node_button)