无法找到selenium元素下拉菜单python

问题描述 投票:0回答:2

我在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

python selenium selenium-webdriver ebay
2个回答
0
投票

它显示的项目不是真正的Select元素。它只是一个带有大量链接的<ul,默认隐藏。所以我会建议这样的事情:

  1. 选择当前排序链接(<a)以打开其他选项列表。最容易做到的是通过链接文本。像ul[1]/li/div/这样的选择者只是令人困惑和不必要。请注意,根据此操作之前的内容,您可能还需要显示此链接。
  2. 出现后选择新选项(即等待它,然后单击)。

Ef。:

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()

0
投票

元素//*[@id="DashSortByContainer"]/ul[1]/li/div/a是一个链接,而不是选择。这就是为什么你不能使用Select类。 你需要在click上使用//*[@id="DashSortByContainer"]/ul[1]/li/div/a,然后在DOM中找到带有值的元素并单击你需要的元素。

你可以找到类似的问题here,你可以使用它作为参考。

© www.soinside.com 2019 - 2024. All rights reserved.