我想从这个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>
到目前为止,这是我的代码:
driver = webdriver.Chrome('/path/to/chromedriver')
driver.get("https://foodmarketmaker.com/main/mmsearch")
iframe = driver.find_element_by_tag_name("iframe")
driver.switch_to.frame(iframe)
select = Select(driver.find_element_by_class_name("select2-hidden- accessible"))
select.select_by_value("bt:Farmer/Rancher")
links = driver.find_elements_by_tag_name('a')
print(links)
for link in links:
print(link.get_attribute('href'))
我得到一个异常,该元素不存在,或者当我通过索引访问时,由于aria-hidden属性为true,我得到一个ElementNotVisibleException。有没有办法解决这个问题?
答案 0 :(得分:1)
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
P.S。您需要将'//li[.="Bass"]'
XPath中spark_config = SparkConf().setAppName(application_name)
ss = SparkSession.builder.config(conf=spark_config).getOrCreate()
class StringAccumulatorParam(AccumulatorParam):
def zero(self, v):
return []
def addInPlace(self, variable, value):
variable.append(value)
return variable
errorCount = ss.sparkContext.accumulator(0)
errorValues = ss.sparkContext.accumulator("", StringAccumulatorParam())
newSchema = StructType([
StructField("id", IntegerType(), True),
StructField("name", StringType(), True)
StructField("status", BooleanType(), True)])
errorDF = ss.read.json("/Users/test.jsonl")
errorDF2 = ss.createDataFrame(errorDF, newSchema).cache()
def checkErrorCount(row):
global errorCount
errorDF2["id"] = row. newSchema["id"]
errorCount.add(1)
errorValues.add(errorDF2["id"])
errorDF.foreach(lambda x: checkErrorCount(x))
print("{} rows had questionable values.".format(errorCount.value))
ss.stop()
节点的文本值替换为必需选项
答案 1 :(得分:0)
根据您共享的HTML打印所有选项,您必须诱导 WebDriverWait 切换到所需的框架,然后单击搜索框以获取< em> options 可见如下:
代码块:
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 & Seafood
Buyer: Fruit & Nuts
Buyer: Grains & OilSeed
Buyer: Herbs
Buyer: Meat & Poultry
Buyer: Miscellaneous
Buyer: Specialty Products
Buyer: Sugar/Confectionary & Snacks
Buyer: Vegetables
Eating & Drinking Place
Eating & Drinking Place: Cafeteria & Buffet
Eating & Drinking Place: Caterer
Eating & Drinking Place: Drinking Place
Eating & Drinking Place: Food Service Contractor
Eating & Drinking Place: Mobile Food Service
Eating & Drinking Place: Restaurant
Eating & Drinking Place: Snack & Nonalcoholic Beverage Bar
Farmer/Rancher
Farmer/Rancher: Dairy
Farmer/Rancher: Forage
Farmer/Rancher: Fruits & Nuts
Farmer/Rancher: Grains
Farmer/Rancher: Herbs
Farmer/Rancher: Livestock Production (Beef Cattle)
Farmer/Rancher: Meat & 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 & Liquor Store
Food Retailer: Candy, Nut & Confectionery
Food Retailer: Fish Market
Food Retailer: Fruit & Vegetable Market
Food Retailer: Grocery/Convenience Store
Food Retailer: Health Supplement Store
Food Retailer: Meat & 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 & Vegetable Products
Processor/Packing Shed: Grain & Oilseed Milling
Processor/Packing Shed: Meat & 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 & Alcoholic Beverages
Wholesaler: Confectionery & Snacks
Wholesaler: Dairy Products
Wholesaler: Farm Products
Wholesaler: Fish/Shellfish/Seafood
Wholesaler: Fruit & Vegetable
Wholesaler: General Grocery
Wholesaler: Meat & 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