Selenium - Python - 选择 - 下拉菜单链接
Posted
技术标签:
【中文标题】Selenium - Python - 选择 - 下拉菜单链接【英文标题】:Selenium - Python - Select - drop-down menu links 【发布时间】:2018-08-06 13:52:16 【问题描述】:我正在尝试循环浏览下拉菜单,其中每个元素都是指向不同页面的链接。我想循环浏览下拉菜单的所有元素,一次单击一个,转到它引导我到的页面,从该页面下载一些内容,然后单击下拉菜单(存在于每页)并转到菜单上的下一个选项。
这是下拉菜单的代码:
<div class="account-selection">
<input type="hidden" name="fromResourceNode" value="/content/customer/my_account/jcr:content/mainpar/myaccount">
<input type="hidden" name="extraTabInfo" id="extraTabInfo" value="">
<input type="hidden" name="extraAccordionInfo" id="extraAccordionInfo" value="">
<label for="selectAcct" class="hidden">Select your account</label>
<select id="selectAcct" name="currAcctNumber">
<option value="1001140692">1001140692, 4 BEECH </option>
<option value="1001140648">1001140648, BEECH 3</option>
<option value="1001257836">1001257836, 7C BEECH </option>
<option value="1001265171">1001265171, 4E BEECH </option>
<option value="1001238965">1001238965, 4D BEECH </option>
当我尝试使用时:
select = Select(browser.find_element_by_id('selectAcct'))
select.select_by_value('1001140648')
Keys.ENTER
无论出于何种原因,selenium 浏览器都没有被定向到实际单击链接将我带到的下一页。知道我做错了什么吗?我已经正确设置了所有导入,并且程序的其他所有内容都运行顺利。
另外,是否有任何简单的方法可以浏览整个下拉菜单,而无需手动填写实际的选项值?
谢谢!
【问题讨论】:
你能用更多的outerhtml
更新这个问题吗?
我用更多的 HTML 更新了它。这样更好吗?
【参考方案1】:
Keys.ENTER 除了识别 ENTER 键之外并没有真正做任何事情。按下它,
select.send_keys(Keys.ENTER)
或者,如果选择在表单中,则执行
select.submit()
(您可以考虑将元素重命名为“select_account”以避免可能的混淆)。
另外,获取所有选项的列表:
available_options = select.options
然后您可以循环遍历(不过,我想知道您是否会在第一个之后在页面上遇到 StaleElementException...您可能需要先枚举它们,然后循环遍历它们)
【讨论】:
它告诉我“选择”没有“提交”属性。【参考方案2】:根据您分享的 HTML,不确定为什么 浏览器没有被定向到下一页 也许您之前似乎试图调用 select_by_value()
<select>
元素和 <option>
元素正确加载。因此,一种可能的解决方案是诱导 WebDriverWait 元素为 selectable,如下所示:
WebDriverWait(driver, 20).until(EC.element_to_be_selected((By.XPATH, "//select[@id='selectAcct' and @name='currAcctNumber']")))
select = Select(browser.find_element_by_xpath("//select[@id='selectAcct' and @name='currAcctNumber']"))
select.select_by_value('1001140648')
【讨论】:
以上是关于Selenium - Python - 选择 - 下拉菜单链接的主要内容,如果未能解决你的问题,请参考以下文章