【问题标题】:Python Selenium option-list, data-option-valuePython Selenium 选项列表、数据选项值
【发布时间】:2021-11-13 04:44:01
【问题描述】:

我需要从 html 选项列表类中选择一个项目,这样我才能进入下一页。我通过编写如下代码设法解决了“不可见”错误:

from selenium import webdriver
from selenium.webdriver.support.ui import Select
driver = webdriver.Chrome(executable_path="C:/Windows/chromedriver.exe")
driver.get("https://www.cardmarket.com/en/Magic/AdvancedSearch")    
expansion_input = driver.find_element_by_name("expansionTempInput")
expansion_input.send_keys("Ultimate Masters")

这种方式选项列表下拉应该是可见的,并且只有 1-2 个属性,但我不能选择其中任何一个来继续。也尝试使用此代码:

prog = Select(driver.find_element_by_xpath('//*[@id="ExpansionSection"]/div[2]/div/div/div[2]/ul'))
prog.select_by_visible_text("Ultimate Masters")

但是 <ul> 类不支持 Select...

所以问题是:有什么办法可以在输入“expansion_input”后遍历所有可见的<li>,然后单击符合条件的那个(在这种情况下是字符串“Ultimate Masters” “)?像“getAtribute[0].click()

花了几个小时来解决这个问题,但我搜索的 stackoverflow 都没有帮助我。如果它转到 html 和新鲜到 python,我完全是绿色的,所以我会很感激回答。

【问题讨论】:

  • 相信你在输入“Ultimate Masters”后必须回车。

标签: python html selenium selenium-webdriver webdriverwait


【解决方案1】:

您应该在访问“expansion_input”之前添加一个等待,然后您将能够获得所有可见的<li> 元素,如下所示:

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
from selenium.webdriver.support.ui import Select
driver = webdriver.Chrome(executable_path="C:/Windows/chromedriver.exe")
wait = WebDriverWait(driver, 20)
driver.get("https://www.cardmarket.com/en/Magic/AdvancedSearch")   
wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input[name=expansionTempInput]"))).click()
wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, ".list-container.collapse.show .option-list li")))
visible_options = driver.find_elements_by_css_selector(".list-container.collapse.show .option-list li")
for option in visible_options:
    if "Ultimate Masters" in option.get_attribute("data-option-text"):
        driver.execute_script("arguments[0].click();", option)

这可能会起作用,但这取决于特定网页实现的技术。那里有 440 个选项,可能并非所有选项都是通过单击输入元素实际加载的。 因此,我建议将您的输入文本输入到输入元素,然后单击建议的选项,如下所示:

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
from selenium.webdriver.support.ui import Select
driver = webdriver.Chrome(executable_path="C:/Windows/chromedriver.exe")
wait = WebDriverWait(driver, 20)
driver.get("https://www.cardmarket.com/en/Magic/AdvancedSearch")   
expansion_input = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input[name=expansionTempInput]")))
expansion_input.click()
expansion_input.send_keys("Ultimate Masters")
wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, ".highlighted"))).click()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-14
    • 2021-05-24
    • 1970-01-01
    • 2021-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-25
    相关资源
    最近更新 更多