使用Python单击HTML元素

时间:2018-07-13 10:45:34

标签: python html selenium selenium-webdriver

这是我关于HTML的元素:

<a aria-role="button" href="" class="sc-button-play playButton sc-button sc-button-xlarge" tabindex="0" title="Play" draggable="true">Play</a>

我使用Selenium进行了点击事件:

from selenium import webdriver
driver = webdriver.Chrome()
driver.get(url)
buttons = driver.find_elements_by_class_name('playButton')

您可以猜测,它不起作用:)

4 个答案:

答案 0 :(得分:2)

尝试一下:

from selenium import webdriver

driver = webdriver.Chrome()
driver.get(url)
# find all elements with following xPath (returns a list of elelements)
buttons = driver.find_elements_by_xpath("//a[@class = 'playButton']") # using xPath

或者如果您想单击一个元素,请使用此:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()
driver.get(url)
# wait(at least 10 seconds) for element will be clickable and clcick on it
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//a[@class = 'playButton']"))).click();

Here,您可以找到有关定位元素的更多信息。

答案 1 :(得分:2)

如果您想单击链接,请尝试

driver.find_element_by_link_text("Play").click()

如果链接文本实际在页面上显示为PLAY,请尝试

driver.find_element_by_link_text("PLAY").click()

答案 2 :(得分:2)

尝试使用xpath-

driver.find_elements_by_xpath("//a[@class = 'playButton']")

并找到xpath,您需要这样做-

  • 右键单击所需的元素,然后单击inspect

  • 已检查的元素将在chrome调试器中突出显示。右键单击该元素,将打开一堆选项

  • 单击copy,然后单击Copy XPath

并在上面的代码中使用该xpath。

答案 3 :(得分:0)

@Andersson @AndreiSuvorkov和@ThatBird提供了答案,但似乎还有更多因素需要我们考虑:

当您调用get(url)并在下一步尝试在元素上调用click()时,

  • 您需要使用 find_elements* 代替find_element*,如下所示:

    button = driver.find_element_by_class_name('class_name')
    
  • 在调用click之前,需要诱使 WebDriverWait 使元素可点击,如下所示:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "element_xpath"))).click();
    
  • 当您想要单击特定元素时,请使用Locator Strategy的帮助,该DOM Tree将唯一地标识{{3}}中的 WebElement 。对于<a>个节点(即锚标记),LINK_TEXTPARTIAL_LINK_TEXT必须是首选选项。除了那些更常规的方法之外,还可以广泛使用classid属性(其他属性没有classid属性后备)来构造 CssSelector XPath 如下:

  • LINK_TEXT

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.LINK_TEXT, "Play"))).click()
    
  • CSS_SELECTOR

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "a.sc-button-play.playButton.sc-button.sc-button-xlarge[title='Play']"))).click()
    
  • XPATH

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//a[@class='sc-button-play playButton sc-button sc-button-xlarge' and @title='Play'][contains(.,'Play')]"))).click();