Как найти кнопку с текстом в качестве комментария в соответствии с HTML, используя Selenium и Python? - PullRequest
0 голосов
/ 06 сентября 2018

Я использую помощник Xpath в расширении chrome, чтобы найти xpath для программирования на python. Я прочитал документацию, но есть ли лучшее руководство.

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()

Ответы [ 2 ]

0 голосов
/ 06 сентября 2018

В соответствии с 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
0 голосов
/ 06 сентября 2018

xpath будет:

//button[text()='Comment']  

Однако, вам следует ввести ожидание большей стабильности в вашем коде.

. click() метод return void. Поэтому вызов метода click и сохранение в переменной не имеет никакого смысла.

...