我正在寻找通过使用内置产品分类从低价到高价的网页
我能够使用xpath成功选择正确的下拉菜单,如下所示:
WebDriverWait(driver, 5).until(
EC.element_to_be_clickable((By.XPATH,
'//*[@id="react-views-container"]/div/div/div/div[1]/div/div/div/div[2]/div[1]/div/div[2]/div/div[1]/button')))
这仅是一种测试,因为我对硒还比较陌生。但是,鉴于此工作有效,我无法理解以下原因为何:
WebDriverWait(driver, 20).until(
EC.element_to_be_clickable((By.XPATH,
'//*[@id="react-views-container"]/div/div/div/div[1]/div/div/div/div[1]/div/div[1]/div/div[2]/div/div/div/div/div[4]')))
这会导致达到超时的错误。这不是超时太短的问题。我已经尝试了div搜索给定的文本,但是那也不起作用。这是我尝试的搜索的一个示例,该搜索几乎是从类似问题中复制的:
Select(driver.find_element_by_xpath("//div[contains(text(), 'Unit Price: Low First')]"))
以下是所需菜单项的HTML:
<div role="menuitem" tabindex="0" data-radium="true" style="background-color: rgb(247, 247, 247); padding: 8px 16px; font-size: 16px; font-weight: normal; color: white; white-space: nowrap; line-height: 20px; min-width: 260px; height: 36px; cursor: pointer;">
<div data-radium="true" style="float: left; display: block; line-height: 24px;">Unit Price: Low First</div>
</div>
答案 0 :(得分:0)
好吧,这在html和Selenium中是一个痛苦的教训。无论如何,我通过创建所有菜单项的列表然后遍历该列表并单击所需的列表来解决。此刻,我有这个:
menu_items=driver.find_elements_by_xpath('//div[@role="menuitem"]')
for i in menu_items:
if "Unit Price" in i.text:
i.click()
break
由于某种原因,我不能只执行menu_items [4] .click(),但我相信这是由于元素列表是元组或其他内容的列表,尽管我将不得不检查文档以进行验证。之后,我将更新答案。