我在chrome扩展中使用Xpath helper来查找python编程的xpath。我已阅读文档但有更好的指南。
HTML如下:
<form class="addComment expand" data-id="9644797">
<img src="https://ctl.s6img.com/society6/img/g2taHIrokQ01R_67jS8ulaWI2wk/h_150,w_150/users/avatar/~artwork/s6-original-art-uploads/society6/uploads/u/sul97/avatar_asset/d837ee10016843a3bba9ae3310cc338d" width="25" height="25">
<textarea placeholder="Add a comment..." data-button="9644797"></textarea>
<button id="b9644797">Comment</button>
</form>
有人能给我一个例子来点击这条路径的按钮吗?我曾试图使用它,但没有工作
submit_comment = driver.find_element_by_xpath("/html[@class='gr__society6_com']/body[@class='platform- desktop']/div[@id='wrap']/div[@id='content']/div[@id='MySociety']/div[@class='one-col clearfix']/ul[@id='Mason']/li[@id='9649102']/div[@class='item-wrap']/div[@class='comments']/form[@class='addComment expand']/button[@id='b9649102']").click()
xpath将是:
//button[text()='Comment']
但是,您应该介绍webdriver等待代码中的更多稳定性。
.click()
方法返回void。因此调用click方法并存储在变量中没有任何意义。
根据您共享的HTML,所需的元素是React元素,因此您必须引导WebDriverWait才能使元素可单击,并且您可以使用以下任一解决方案:
CSS_SELECTOR
:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "form.addComment.expand button[id^='b']"))).click()
XPATH
:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//form[@class='addComment expand']//button[starts-with(@id,'b') and contains(.,'Comment')]"))).click()
注意:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC