合理点击按钮

时间:2019-03-19 21:53:56

标签: python selenium

我试图遍历每个DIV元素,写一些数据,最后单击Submit。但是,我不确定为什么只写值并单击“提交”按钮总是在同一元素上。

例如:

<div id="random_id" class="section">
  Last name:<br>
  <input type="text" id="lastname"><br><br>
  <input type="submit" value="Submit" id="submit">
</div>

 <div id="random_id" class="section">
    Last name:<br>
    <input type="text" id="lastname"><br><br>
    <input type="submit" value="Submit" id="submit">
</div>

<div id="random_id" class="section">
    Last name:<br>
    <input type="text" id="lastname"><br><br>
    <input type="submit" value="Submit" id="submit">
</div>

<div id="random_id" class="section">
    Last name:<br>
    <input type="text" id="lastname"><br><br>
    <input type="submit" value="Submit" id="submit">
</div>

我编写了以下python脚本来循环所有部分,在其中填充数据,然后单击提交。

elements = driver.find_elements_by_xpath("//div[@class='section']")
for element in elements:
    element.find_element_by_xpath("//div[@id='section']").send_keys("hello world")
    element.find_element_by_xpath("//div[@id='submit']").click()

运行脚本时,仅填充第一个元素并单击3次。

1 个答案:

答案 0 :(得分:0)

仅填充第一个元素,因为在Selenium中将element.child_element与xpath一起使用时,必须添加./child::tag或使用descendant::tag使其相对于父元素,否则是绝对的。您可以找到here

element.find_element_by_xpath(".//input[@id='lastname']")
element.find_element_by_xpath("child::input[@id='lastname']")
element.find_element_by_xpath("descendant::input[@id='lastname']")

如何使用xpath:

elements = driver.find_elements_by_xpath("//div[@class='section']")
for element in elements:
    element.find_element_by_xpath(".//input[@id='lastname']").send_keys("hello world")
    element.find_element_by_xpath(".//input[@id='submit']").click()

如何使用CSS选择器:

elements = driver.find_elements_by_css_selector(".section")
for element in elements:
    element.find_element_by_css_selector("#lastname").send_keys("hello world")
    element.find_element_by_css_selector("#submit").click()