使用Python Selenium在网页指定表格列搜索文本并定位下载资源
特定列关键词匹配定位解决方案
核心问题是原XPath未限定列位置,会按DOM顺序返回所有节点中第一个匹配关键词的结果,无法筛选目标列,直接优化XPath表达式增加列限定即可解决,无需额外的节点路径替换操作。
最简Selenium实现方案
无需调用lxml做二次解析,直接通过单条XPath同时匹配列位置与关键词,一步定位到目标资源:
# 一步定位:第4列包含指定关键词的节点 向右偏移2列的资源节点 pdf_element = driver.find_element(By.XPATH, "//td[4][contains(text(), 'keyword')]/following-sibling::td[2]")
原代码逻辑修改方案
如果要保留原有lxml解析的实现逻辑,只需修改XPath查询规则,限定只匹配第4列的关键词节点即可:
row = driver.find_element(By.XPATH, "//td[4][contains(text(), 'keyword')]") tree = lxml.html.fromstring(row.parent.page_source) # 仅查询第4列的匹配项,不会匹配到td[5]的节点 element = tree.xpath("//td[4][contains(text(), 'keyword')]")[0] root = tree.getroottree() xpth = root.getpath(element) pdf_xpath = xpth.replace('td[4]', 'td[6]')
原代码问题说明
原查询规则//*[contains(text(), 'keyword')]中的通配符*会匹配所有包含关键词的DOM节点,没有限定节点类型与列位置,因此会优先返回DOM结构中先出现的td[5]匹配项,添加td[4]的节点限定后,只会筛选第4列的匹配结果,直接定位到目标节点。
内容的提问来源于stack exchange,提问作者c.v.hammons
相关产品推荐
相关产品推荐

