我正在ebay网站上使用Selenium Webdriver。我正在尝试将下拉菜单从最佳匹配更改为最低价格+ P&P。这是我的代码:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import Select
sortdown = browser.find_element(By.XPATH, '//*[@id="DashSortByContainer"]/ul[1]/li/div/a')
sortselect = Select(sortdown)
sortselect.select_by_visible_text('Lowest price + P&P')
如果元素是动态的,我已经使用了XPATH。而且python仍然说找不到元素。有人可以帮忙吗?以下是示例链接,其结果位于右上角的下拉菜单中:https://www.ebay.co.uk/sch/i.html?_from=R40&_trksid=m570.l1313&_nkw=harley&_sacat=0
答案 0 :(得分:0)
它显示的项目不是真实的Select
元素。它只是一个<ul
,带有一堆链接,默认情况下是隐藏的。所以我建议像这样:
<a
)以打开其他选项的列表。最简单的方法是通过链接文本。像ul[1]/li/div/
这样的选择器只是令人困惑且不必要。请注意,根据此操作之前的内容,您可能还需要此链接才能显示。例如:
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
wait = WebDriverWait(browser, 10)
# click link to display all options
sortdown = browser.find_element_by_link_text('Best Match')
sortdown.click()
# select a new option
lowestprice = wait.until(EC.presence_of_element_located((By.LINK_TEXT, 'Lowest price + P&P')))
lowestprice.click()
答案 1 :(得分:0)
元素//*[@id="DashSortByContainer"]/ul[1]/li/div/a
是一个链接,而不是选择。这就是为什么您不能使用Select
类的原因。
您需要在click
上使用//*[@id="DashSortByContainer"]/ul[1]/li/div/a
,然后在DOM中找到具有值的元素,然后单击所需的元素。
您可以找到类似的问题here,其答案可以用作参考。