我正在用Selenium解析一个网站。
我需要在隐藏类中选择一个选项。该部分的Html代码:
<div class="search region">
<div class="input-group">
<div class="cec-select">
<select tabindex="-1" class="select2-hidden-accessible"
aria-hidden="true"><option></option><option value="value_1">text_1</option><option value="value_2">text_2</option></select>
<script>$(function () {
$('.cec-select select').select2({
placeholder: "Выберите субъект",
"language": {
"noMatches": function () {
return "Select a subject";
}
}
}).change(function () {
window.open($(this).val(), '_blank');
});
});</script>
</div>
<br>
</div>
</div>
我尝试像往常一样通过选择功能选择一个选项:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver import ActionChains
from bs4 import BeautifulSoup
from selenium.webdriver.support.ui import Select
driver = webdriver.Chrome(executable_path='./chromedriver', chrome_options=chrome_options)
driver.get('url')
regions = Select(driver.find_element_by_class_name("select2-hidden-accessible"))
regions.select_by_index('2')
我得到了这个错误消息:ElementNotInteractiableException:message:element notinteractiable:element当前不可见,可能无法操作。
完整的错误消息:
ElementNotInteractableException Traceback (most recent call last)
<ipython-input-28-7e06e646520e> in <module>
----> 1 regions.select_by_index('2')
~\Anaconda3\lib\site-packages\selenium\webdriver\support\select.py in select_by_index(self, index)
99 for opt in self.options:
100 if opt.get_attribute("index") == match:
--> 101 self._setSelected(opt)
102 return
103 raise NoSuchElementException("Could not locate element with index %d" % index)
~\Anaconda3\lib\site-packages\selenium\webdriver\support\select.py in _setSelected(self, option)
210 def _setSelected(self, option):
211 if not option.is_selected():
--> 212 option.click()
213
214 def _unsetSelected(self, option):
~\Anaconda3\lib\site-packages\selenium\webdriver\remote\webelement.py in click(self)
78 def click(self):
79 """Clicks the element."""
---> 80 self._execute(Command.CLICK_ELEMENT)
81
82 def submit(self):
~\Anaconda3\lib\site-packages\selenium\webdriver\remote\webelement.py in _execute(self, command, params)
631 params = {}
632 params['id'] = self._id
--> 633 return self._parent.execute(command, params)
634
635 def find_element(self, by=By.ID, value=None):
~\Anaconda3\lib\site-packages\selenium\webdriver\remote\webdriver.py in execute(self, driver_command, params)
319 response = self.command_executor.execute(driver_command, params)
320 if response:
--> 321 self.error_handler.check_response(response)
322 response['value'] = self._unwrap_value(
323 response.get('value', None))
~\Anaconda3\lib\site-packages\selenium\webdriver\remote\errorhandler.py in check_response(self, response)
240 alert_text = value['alert'].get('text')
241 raise exception_class(message, screen, stacktrace, alert_text)
--> 242 raise exception_class(message, screen, stacktrace)
243
244 def _value_or_default(self, obj, key, default):
ElementNotInteractableException: Message: element not interactable: Element is not currently visible and may not be manipulated
我想,我应该先在选项下运行一个脚本,但我不知道该怎么做。
您可以尝试这种方法。查找元素由X路径
public void selectFromDropdown(){
// Find the size of dropdown list items.
List <WebElement> dropdownSize = findElementsByXpath(".//select[@class='select2-hidden-accessible']//option");
// Iterate thru each dropdown value and click each of them.
if(dropdownSize.size() > 0){
for(int i=1; i<= dropdownSize.size(); i++){
findElementByXpath(".//select[@class='select2-hidden-accessible']")
findElementByXpath(".//select[@class='select2-hidden-accessible']//option["+i+"]").click();
}
}
}
您可以通过添加try/catch并在从下拉列表中选择特定值后中断循环来进一步改进它。
解决了这个问题。首先,我点击文本字段,因此所有选项都在站点上可见。
driver.find_elements_by_xpath("//*[contains(text(), 'Выберите субъект')]")[2].click()
单击之前 单击后
在html代码中,选项仍然在隐藏类中,我仍然不能选择它们。但是我注意到在我点击文本字段后出现了一些新的html代码。这个新片段复制了我需要的所有选项。他们现在都在李的标记下。
<iframe aria-hidden="true" frameborder="0" name="ym-native-frame" style="opacity: 0 !important; width: 0px !important; height: 0px !important; position: absolute !important; left: 100% !important; bottom: 100% !important; border: 0px !important;" title="ym-native-frame"></iframe><ym-measure class="ym-viewport" style="display: block; top: 0px; right: 0px; bottom: 0px; left: 0px; height: 100vh; width: 100vw; position: fixed; transform: translate(0px, -100%); transform-origin: 0px 0px;"></ym-measure><ym-measure class="ym-zoom" style="bottom: 100%; position: fixed; width: 100vw;"></ym-measure><span class="select2-container select2-container--default select2-container--open" style="position: absolute; top: 1416.33px; left: 844.99px;"><span class="select2-dropdown select2-dropdown--below" dir="ltr" style="width: 350px;"><span class="select2-search select2-search--dropdown"><input autocapitalize="off" autocomplete="off" autocorrect="off" class="select2-search__field" role="textbox" spellcheck="false" tabindex="0" type="search"/></span><span class="select2-results"><ul aria-expanded="true" aria-hidden="false" class="select2-results__options" id="select2-42bc-results" role="tree"><li aria-selected="false" class="select2-results__option select2-results__option--highlighted" id="id_1" role="treeitem">text_1</li><li aria-selected="false" class="select2-results__option" id="id_2" role="treeitem">text_2</li></ul></span></span></span></body></html>
我有两个<代码> 当用户从第一个选择框中选择一个值时,我希望第二个选择框只显示连接的值。 我的代码: 因此,当用户从第一个选择框M中选择“test1”时,他在第二个选择框上只会看到“test2”、“test3”和“test4”;第一个框中的“test2”将在第二个框中显示“test6”、“test7”和“test8”。 如何使用JavaScript解决此问题?
问题内容: 我是Angular的新手,正在尝试ng-options。在我的控制器中,我有: 在我的模板中,我有: 根据视图,我想隐藏“读取”或“写入”。所以在我的控制器中,我还有另一个标志来指示它是什么视图。在使用ng- options之前,我有一个普通的select下拉列表,并做了如下操作: 有没有办法用ng-options做到这一点?谢谢。 问题答案: 您可以在ngOptions表达式中使用过
问题内容: 我有几个随机块。每当一个块落在新行中时,我都会使它看起来不同。当用户单击按钮时,我隐藏了的几个块,并且出现了问题。该选择也算隐藏要素。 有没有办法忽略这些特定的块,以便每一行都具有不同的样式?这是类似情况的示例。 我专门在寻找纯CSS解决方案。 请为您的答案提供小提琴! 而且我无法永久删除这些块,我的用户可以选择单击按钮时过滤文件,这就是隐藏和显示方案的原因。 问题答案: 当用户单击按
问题内容: 这应该工作: 它可以在Firefox中运行,但不能在Chrome中运行(可能未在IE中运行,未经测试)。 一个更有趣的示例: 是将选项元素与DOM分离的唯一选择吗?我需要稍后再显示给他们,所以这不会很有效。 问题答案: 不幸的是,您不能在所有浏览器中隐藏元素。 在过去,当我需要这样做时,我就设置了它们的属性,就像这样… 然后,我使用了这段CSS,在浏览器中支持隐藏的位置…
问题内容: 好的,一段时间以来,我一直在寻找答案,但我遇到的所有问题(甚至在搜索javascript时)都与jQuery结合在一起!没人再使用普通的javascript吗?!? 因此,我想要一个下拉列表(使用多个选项进行选择)。选择某个选项后,我希望显示一个隐藏的div。 然后,我尝试使用以下JavaScript代码: 我猜我的问题出在选项中的onClick触发器上,但是我不确定还有什么用?或者,
在选择域之前: 域名选择后: 当我们启动网站时,它将显示域名下拉列表和选项值为“选择域”。如果我选择“选择域”选项,将显示实际域名。(这意味着在我选择选择域选项之前,不会显示有效域名列表) 我是硒新手,所以我试着使用和可见文本选项选择该选项。 我尝试了下面的python代码。但它不起作用。 我需要按以下顺序选择: > 选择域按钮 接下来,我需要选择自动隐藏文本“选择域…”选项值。然后将显示域值。(