如何使用python selenium find_element_by_xpath查找关键字上方

时间:2018-12-02 01:26:10

标签: python selenium selenium-webdriver xpath web-scraping

我正在尝试找到一个字符串。但这似乎不起作用。

HTML:

<form name="form1" method="post" action="?cz=del&wbid=7683290543&zjt=aaa&lx=CNAME&xl=%C4%AC%C8%CF&fs=" onSubmit="return b_ifsf('delete?');" id="form1">
<td style="width:120px">
<input type="hidden" name="ip" value="aaa.xxx.com.a.bdydns.com." >
<input type="submit" name="rpt$btnDelete" value="delete" />
</td>
</form>
<form name="form1" method="post" action="?cz=del&wbid=2324242122&zjt=bbb&lx=CNAME&xl=%C4%AC%C8%CF&fs=" onSubmit="return b_ifsf('delete?');" id="form1">
<td style="width:120px">
<input type="hidden" name="ip" value="bbb.xxx.com.a.bdydns.com." >
<input type="submit" name="rpt$btnDelete" value="delete" />
</td>
</form>
<form name="form1" method="post" action="?cz=del&wbid=2324242553&zjt=ccc&lx=CNAME&xl=%C4%AC%C8%CF&fs=" onSubmit="return b_ifsf('delete?');" id="form1">
<td style="width:120px">
<input type="hidden" name="ip" value="ccc.xxx.com.a.bdydns.com." >
<input type="submit" name="rpt$btnDelete" value="delete" />
</td>
</form>

如何找出关键字 bbb.xxx.com.a.bdydns.com ,然后点击“提交”以将其删除?

3 个答案:

答案 0 :(得分:1)

@EVNRaja的解决方案方向正确。

要找到文本 bbb.xxx.com.a.bdydns.com ,然后单击具有 value 属性作为 delete 的关联元素您可以使用以下任一解决方案:

  • 使用 xpath click()

    driver.find_element_by_xpath("//form[@id='form1' and @name='form1']//input[@name='ip' and @value='bbb.xxx.com.a.bdydns.com.']//following::input[1]").click()
    
  • 使用 xpath submit()

    driver.find_element_by_xpath("//form[@id='form1' and @name='form1']//input[@name='ip' and @value='bbb.xxx.com.a.bdydns.com.']//following::input[1]").submit()
    

答案 1 :(得分:0)

您要标识的URL被引用为隐藏元素。

您提供的html代码: <input type="hidden" name="ip" value="bbb.xxx.com.a.bdydns.com." >

浏览器中所有隐藏的元素可能都有目的。 示例:

请考虑有文本字段,并且没有数字值作为输入,如果最终用户输入任何数字值,则在文本字段旁边将显示错误代码。 在这里,除非我们输入数字文本,否则错误消息(html标记元素内的文本)将被隐藏。

在您共享的html代码中,您要检查的值在输入标签中被引用并且具有type="hidden" name="ip" value="bbb.xxx.com.a.bdydns.com.",我们可以编写如下的复合xpath:

具有多个复合语句的示例: //input[@type = 'hidden' and @name = 'ip' and contains(@value, 'bbb.xxx.com.a.bdydns.com.')]/following-sibling::input

或 一个简单的例子: //input[contains(@value, 'bbb.xxx.com.a.bdydns.com.')]/following-sibling::input

使用此xpath代码,我们可以直接识别提交,然后在下一步中单击按钮。

答案 2 :(得分:0)

You should be able to use a css selector combination of:

[value='bbb.xxx.com.a.bdydns.com.'] + input

Code:

driver.find_element_by_css_selector("[value='bbb.xxx.com.a.bdydns.com.'] + input").click() #.submit()

The first part is an attribute = value css selector then the "+" is an adjacent sibling combinator, followed by an element selector; saying, find input tag element that is an adjacent sibling element to element with attribute value having value of bbb.xxx.com.a.bdydns.com.