Python Selenium 选项列表,数据选项值

Python Selenium option-list, data-option-value

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

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 个属性,但我无法 select 任何一个继续。也尝试用这段代码来做:

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

但是 Select 不受 <ul> 支持 class...

所以问题是: 有没有什么方法可以在输入“expansion_input”后遍历所有可见的 <li> 并单击匹配的那个标准(在这种情况下将是字符串“Ultimate Masters”)?像“getAtribute[0].click()

花了几个小时来解决这个问题,但 none 我搜索的 Whosebug 帮助了我。如果它进入 html 并且新鲜到 python,我完全是绿色的,所以我将不胜感激。

您应该在访问“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()