从带有 selenium 和 python 的 optgroup 中选择一个选项 [英] Selecting an option from an optgroup with selenium and python
问题描述
我想从这个 optgroup 中选择一个值,然后它应该会给我一个链接下拉列表.
<select id="q" multiple="" tabindex="-1" class="select2-hidden-accessible" aria-hidden="true"><选项></选项><option class="q-all-text" value="al:all">搜索所有文本</option><optgroup label="业务类型"><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')打印(链接)对于链接中的链接:打印(link.get_attribute('href'))
我要么得到元素不存在的异常,要么当我通过索引访问时,由于 aria-hidden 属性为真,我得到一个 ElementNotVisibleException.有没有办法解决这个问题?
解决方案 select
不是您需要处理的节点,因为它不可见.
尝试以下代码以获得所需的输出:
from selenium import webdriver as web从 selenium.webdriver.support.ui 导入 WebDriverWait 作为等待从 selenium.webdriver.support 导入 expected_conditions 作为 ECfrom selenium.webdriver.common.by import Bydriver = 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="开始输入搜索"]'))).点击()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"]]'))))对于链接中的链接:打印(link.get_attribute('href'))
附言您需要将 '//li[.="Bass"]'
XPath 中 li
节点的文本值替换为所需选项
I would like to choose a value from this optgroup which should then give me a dropdown of links.
<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>
Here is my code so far:
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'))
I either get an exception that the element does not exist, or when I access by index, i get an ElementNotVisibleException due to the aria-hidden attribute being true. Is there any way around this?
解决方案 select
is not the node that you need to handle as it's not visible.
Try below code to get required output:
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'))
P.S. You need to replace text value of li
node in '//li[.="Bass"]'
XPath with required option
这篇关于从带有 selenium 和 python 的 optgroup 中选择一个选项的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文
相关文章
- Selenium:如何从选择菜单中选择一个选项?;
- 使用 selenium (python) 从条件下拉列表中选择一个选项;
- 使用 selenium python 从下拉选项中选择一个值;
- 如何使用Selenium和Python从下拉菜单中选择一个选项;
- 从 Selenium Webdriver 的右键菜单中选择一个选项 - Java;
- 使用Selenium在带有optgroup的select上选择选项;
- Python中的Selenium:选择一个选项;
- 从Selenium Webdriver - Java中的右键菜单中选择一个选项;
- 如何使用带有Java的Selenium WebDriver从下拉列表中选择一个选项?;
- 在带有代码接收的动态选择中选择一个选项?;
- 如何使用Selenium WebDriver和Java从Kendo下拉菜单中选择一个选项;
- 使用带有jquery的下一个/上一个按钮从选择列表中选择选项;
- 如何从ASP中选择一个选项:datalist?;
- 如何使用Selenium从动态下拉列表中选择一个选项?;
- 如何通过 Selenium WebDriver 从下拉列表中选择一个选项;
- 使用python selenium chromedriver从源中选择隐藏的选项值;
- 华廷不能选择从列表中选择一个选项;
- 硒:如何从选择菜单中选择一个选项?;
- 在 optgroup 中选择选择器添加选项;
- jQuery –在选择中选择optgroup;
- 如何通过Selenium WebDriver从下拉菜单中选择一个选项;
- 如何使用 Selenium-Python 从多选列表中选择多个选项?;
- 如何从下拉选择中选择一个选项;
- 使用 Selenium webdriver 从日期选择器中选择一个日期;
- Angularjs 和 UI-Select:如何从代码中选择一个选项;
Python最新文章
- 类型错误:只有长度为1的阵列可以尝试拟合指数的数据转换到Python标量;
- bs4.FeatureNotFound:找不到一棵树建设者您所要求的功能:LXML。你需要安装一个解析器库?;
- 系列的真值是不明确的。使用a.empty,a.bool(),a.item(),a.any()或a.all();
- (unicode错误)'unicodeescape'编解码器无法解码位置2-3中的字节:truncated \UXXXXXXXX escape;
- 将pandas dataframe中的列从int转换为string;
- Python:由实例对象调用方法:“missing 1 required positional argument:'self'”;
- Sparksql过滤与多个条件(与where子句中选择);
- JSONDe codeError:期待值:1行1列(CHAR 0);
- Cmake不能找到Python库;
- Python - 将Dataframe中的所有项目转换为字符串;