我试图遍历每个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次。
答案 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()