Python Selenium获取Burger的XPATH及操作相邻下拉框与提交按钮
问题解答
我已通过以下代码在HTML表格中定位到文本为'Burger'的元素:
findRow = driver.find_element(By.XPATH, "//*[contains(text(),'Burger')]").value_of_css_property('#name')
现存在两个技术问题:
- 如何获取包含'Burger'元素的XPATH?
- 如何选中其相邻列下拉框中的'Fish'选项,再点击提交按钮?
对应的HTML代码如下:
<tbody> <tr> <td>..</td> <td>.....</td> </tr> <tr> <td>Burger</td> <td> <select class="form-control input-sm" id="sel222" name="sel222" type="68" group="433" onchange="count(this)"> <option value="1">Vegetables</option> <option value="2">Fish</option> <option value="3">Beef</option> </select> </td> </tr> </tbody> </table> <button type="button" class="btn btn-primary" id="submit"><span class="fa fa-save"></span> Save</button>
问题1:获取包含'Burger'元素的XPATH
如果需要相对XPATH,直接用精准定位表达式即可:
//td[text()='Burger']
这个表达式能直接定位到文本恰好为'Burger'的<td>标签。
如果需要获取绝对XPATH,可以通过JavaScript脚本获取:
burger_td = driver.find_element(By.XPATH, "//td[text()='Burger']") absolute_xpath = driver.execute_script(""" function getXPath(elem) { if (!elem) return ''; var path = ''; for (; elem && elem.nodeType == 1; elem = elem.parentNode) { var count = 0; var sibling = elem.previousSibling; while (sibling) { if (sibling.nodeType == 1 && sibling.tagName == elem.tagName) count++; sibling = sibling.previousSibling; } var tagName = elem.tagName.toLowerCase(); path = '/' + tagName + (count > 0 ? '[' + (count + 1) + ']' : '') + path; } return path; } return getXPath(arguments[0]); """, burger_td) print(absolute_xpath)
问题2:选中相邻列下拉框的'Fish'选项并点击提交按钮
可以通过以下步骤实现:
- 定位到'Burger'所在的行
- 找到该行内的下拉框
- 使用
Select类选中'Fish'选项 - 点击提交按钮
完整代码示例:
from selenium.webdriver.support.ui import Select # 定位Burger所在的tr行 burger_row = driver.find_element(By.XPATH, "//td[text()='Burger']/parent::tr") # 定位该行内的下拉框 select_box = burger_row.find_element(By.TAG_NAME, "select") # 选中'Fish'选项 select = Select(select_box) select.select_by_visible_text("Fish") # 通过文本选中 # 也可以通过value值选中:select.select_by_value("2") # 点击提交按钮 driver.find_element(By.ID, "submit").click()
也可以直接用XPATH一步定位到下拉框:
select_box = driver.find_element(By.XPATH, "//td[text()='Burger']/following-sibling::td/select")
内容的提问来源于stack exchange,提问作者jack
相关产品推荐
相关产品推荐

