【问题标题】:Can't select value from dropdown menu无法从下拉菜单中选择值
【发布时间】:2019-07-30 03:49:15
【问题描述】:

所以我正在从这个网站Supreme Website获取数据。用户已经定义了项目和颜色,这很容易弄清楚。现在我不知道如何从下拉菜单中选择尺寸。我已经尝试过此代码和其他不同的变体,但它们似乎不起作用

while True:
            try:
                select = Select(driver.find_element_by_xpath('//*[@id="s"]'))
                select.select_by_visible_text("XLarge")
                break
            except (NoSuchElementException):
              wait=WebDriverWait(driver, 10)
              waitBis=wait.until(EC.presence_of_element_located((By.ID, 'time-zone-name')))
              driver.refresh()

所以 select_by_visible_text 不起作用。您还会尝试其他哪些建议和方法。谢谢。

【问题讨论】:

  • 你可以通过edit 使用sn-p 工具分享html,因为我无法查看美国网站。
  • @QHarr 添加了 sn-p

标签: python selenium web-scraping selenium-chromedriver bots


【解决方案1】:

您可以等到父级可点击,然后出现选项。您可以通过value 属性选择选项

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

#other code
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "#s"))).click()
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CSS_SELECTOR, '#s [value="65382"]'))).click()  #Possibly just [value="65382"]

【讨论】:

  • 这个有效。现在我只需要弄清楚如何正确使用它,因为用户在下拉列表中选择大小,而不是从类似值中选择数字,所以我如何将下拉列表中的选择与应该输入的数字相关联选择器?所以基本上根据用户的选择使你的代码动态化。有什么想法吗?
  • 您可以尝试结合此处给出的答案(我的与 supputuri),例如WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//select[@id="s"]//option[normalize-space(.)="XLarge"]')))。点击()
【解决方案2】:

你可以使用xpath直接点击选项。

driver.find_element_by_xpath('//select[@id="s"]//option[normalize-space(.)="XLarge"]').click()

【讨论】:

    【解决方案3】:

    您的 xpath 不正确。并且使用 webdriverwait 也会有所帮助。

    试试这个:

    from selenium import webdriver
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_condition as EC
    from selenium.webdriver.common.by import By
    
    driver = webdriver.Chrome()
    driver.get('https://www.supremenewyork.com/shop/jackets/fwpckrdv5/kwam2t7jh?alt=1')
    select = Select(WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//select[@id="size"]'))))
    select.select_by_visible_text('XLarge')
    

    【讨论】:

    • 文件“C:\Users\artjo\Desktop\Python\tkinter3.py”,第 62 行,在 web 中选择 = Select(WebDriverWait(driver, 10).until(EC.presence_of_element_located((By .XPATH, '//select[@id="size"]')))) 文件“C:\Users\artjo\AppData\Local\Programs\Python\Python37-32\lib\site-packages\selenium\webdriver \support\wait.py",第 80 行,直到引发 TimeoutException(message, screen, stacktrace) selenium.common.exceptions.TimeoutException: Message:
    • 我猜网站加载会因地区而异。我无法打开您共享的完整链接,并且您的屏幕截图中的 html 源代码也不同。您提到 select_by_visible_text 不起作用,您是否收到任何错误?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-28
    • 2023-03-31
    • 2017-01-16
    • 1970-01-01
    • 2017-03-23
    相关资源
    最近更新 更多