这是我关于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')
您可以猜测,它不起作用:)
答案 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_TEXT
和PARTIAL_LINK_TEXT
必须是首选选项。除了那些更常规的方法之外,还可以广泛使用class
和id
属性(其他属性没有class
或id
属性后备)来构造 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();