从selenium和python的optgroup中选择一个选项

2024-05-16 17:39:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我想从这个optgroup中选择一个值,然后给我一个链接的下拉列表。在

<div class="searchbar">
    <select id="q" multiple="" tabindex="-1" class="select2-hidden-accessible" aria-hidden="true">
    <option></option>
    <option class="q-all-text" value="al:all">Search all text</option>

    <optgroup label="Business Type">
        <option value="bt:Buyer">Buyer</option>
        <option value="bt:Farmer/Rancher">Farmer/Rancher</option>
        <option value="bt:Farmers Market">Farmers Market</option>
        <option value="bt:Fishery">Fishery</option>
        <option value="bt:Food Bank">Food Bank</option>
    </optgroup>

以下是我目前为止的代码:

^{pr2}$

我要么得到一个元素不存在的异常,要么当我通过索引访问时,我得到一个ElementNotVisibleException,因为aria hidden属性为true。有什么办法吗?在


Tags: texttruevaluerancherallbuyermarkethidden
2条回答

根据您共享的HTML打印所有选项,您必须诱导WebDriverWait切换到所需的帧,然后单击搜索框,使选项可见,如下所示:

  • 区块代码:

    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.common.by import By
    
    options = Options()
    options.add_argument("start-maximized")
    options.add_argument("disable-infobars")
    options.add_argument(" disable-extensions")
    driver = webdriver.Chrome(chrome_options=options, executable_path=r'C:\Utility\BrowserDrivers\chromedriver.exe')
    driver.get("https://foodmarketmaker.com/main/mmsearch")
    WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"//iframe[@src='https://search.foodmarketmaker.com']")))
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[@class='searchbar']//input[@class='select2-search__field' and @placeholder='start typing to search']"))).click()
    links = driver.find_elements_by_xpath("//li[@class='select2-results__option' and @aria-label='Business Type']/strong//following::ul[1]//li")
    for link in links:
        print(link.get_attribute('innerHTML'))
    
  • 控制台输出:

    Buyer
    Buyer: Baked Goods
    Buyer: Beverages
    Buyer: Dairy
    Buyer: Fish &amp; Seafood
    Buyer: Fruit &amp; Nuts
    Buyer: Grains &amp; OilSeed
    Buyer: Herbs
    Buyer: Meat &amp; Poultry
    Buyer: Miscellaneous
    Buyer: Specialty Products
    Buyer: Sugar/Confectionary &amp; Snacks
    Buyer: Vegetables
    Eating &amp; Drinking Place
    Eating &amp; Drinking Place: Cafeteria &amp; Buffet
    Eating &amp; Drinking Place: Caterer
    Eating &amp; Drinking Place: Drinking Place
    Eating &amp; Drinking Place: Food Service Contractor
    Eating &amp; Drinking Place: Mobile Food Service
    Eating &amp; Drinking Place: Restaurant
    Eating &amp; Drinking Place: Snack &amp; Nonalcoholic Beverage Bar
    Farmer/Rancher
    Farmer/Rancher: Dairy
    Farmer/Rancher: Forage
    Farmer/Rancher: Fruits &amp; Nuts
    Farmer/Rancher: Grains
    Farmer/Rancher: Herbs
    Farmer/Rancher: Livestock Production (Beef Cattle)
    Farmer/Rancher: Meat &amp; Poultry
    Farmer/Rancher: Specialty Products
    Farmer/Rancher: Vegetables
    Farmers Market
    Fishery
    Fishery: Fish/Shellfish/Seafood
    Food Bank
    Food Bank: Food Bank
    Food Hub
    Food Retailer
    Food Retailer: Baked Goods Store
    Food Retailer: Beer, Wine &amp; Liquor Store
    Food Retailer: Candy, Nut &amp; Confectionery
    Food Retailer: Fish Market
    Food Retailer: Fruit &amp; Vegetable Market
    Food Retailer: Grocery/Convenience Store
    Food Retailer: Health Supplement Store
    Food Retailer: Meat &amp; Poultry Market
    Food Retailer: Other Direct Selling Establishments
    Food Retailer: Other Specialty Food Store
    General Member
    Processor/Packing Shed
    Processor/Packing Shed: Animal Food Manufacturing
    Processor/Packing Shed: Bakery Products
    Processor/Packing Shed: Beverages
    Processor/Packing Shed: Dairy Products
    Processor/Packing Shed: Fish/Shellfish/Seafood Products
    Processor/Packing Shed: Fruit &amp; Vegetable Products
    Processor/Packing Shed: Grain &amp; Oilseed Milling
    Processor/Packing Shed: Meat &amp; Poultry Products
    Processor/Packing Shed: Miscellaneous
    Processor/Packing Shed: Packing Shed
    Processor/Packing Shed: Sugar and Confectionery Products
    Tourism
    Tourism: Agritourism
    Tourism: Fishing Charter
    Tourism: Hunting
    Wholesaler
    Wholesaler: Beer, Wine &amp; Alcoholic Beverages
    Wholesaler: Confectionery &amp; Snacks
    Wholesaler: Dairy Products
    Wholesaler: Farm Products
    Wholesaler: Fish/Shellfish/Seafood
    Wholesaler: Fruit &amp; Vegetable
    Wholesaler: General Grocery
    Wholesaler: Meat &amp; Poultry
    Wholesaler: Other Grocery
    Wholesaler: Packaged Frozen Food
    Winery
    Winery: Blends or Generic Wine
    Winery: Fortified Wine
    Winery: Fruit Wine
    Winery: Other Wine Products
    Winery: Red Wine
    Winery: Sparkling Wine
    Winery: White Wine
    

select不是您需要处理的节点,因为它不可见。在

请尝试以下代码以获取所需的输出:

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


driver = web.Chrome('/path/to/chromedriver')
driver.get("https://foodmarketmaker.com/main/mmsearch")
iframe = driver.find_element_by_tag_name("iframe")
driver.switch_to.frame(iframe)

wait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, '//section[@id="search-right"]//input[@placeholder="start typing to search"]'))).click()
wait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, '//li[.="Bass"]'))).click()

links = wait(driver, 10).until(EC.presence_of_all_elements_located((By.XPATH, '//section[@id="search-results"]//a[.//*[name()="svg"]]')))

for link in links:
    print(link.get_attribute('href'))

另外,您需要将'//li[.="Bass"]'XPath中li节点的文本值替换为必需的选项

相关问题 更多 >