使用python +硒chromedriver。 在登录屏幕上并尝试单击登录按钮,但是我似乎无法正确识别该元素。
代码试用:
login = driver.find_element_by_css_selector('tv-button.tv-button--no-border-radius.tv-button--size_large.tv-button--primary_ghost.tv-button--loader')
click(login)
HTML:
<button type="submit" class="tv-button tv-button--no-border-radius tv-button--size_large tv-button--primary_ghost tv-button--loader">
<span class="tv-button__text">Log In</span>
<span class="tv-button__loader"><span class="tv-button__loader-item"></span><span class="tv-button__loader-item"></span><span class="tv-button__loader-item"></span></span></button>
答案 0 :(得分:1)
似乎您一开始就错过了.
,所以Css选择器将寻找tv-button
标记而不是类。试试这个:
login = driver.find_element_by_css_selector('.tv-button.tv-button--no-border-radius.tv-button--size_large.tv-button--primary_ghost.tv-button--loader')
click(login)
答案 1 :(得分:1)
毫无疑问,我们应该始终在xpath上选择css选择器。
但是您正在使用的CSS选择器:.tv-button.tv-button--no-border-radius.tv-button--size_large.tv-button--primary_ghost.tv-button--loader
看起来非常不稳定。
对于仅登录按钮,您可以使用:
xpath://span[contains(text(),'Log In')]/parent::button
在这种情况下,应避免使用css选择器的原因是(在这种情况下)css选择器是类名的组合,因此,如果任何类名发生更改,则必须更改定位器。
在这种情况下,很有可能更改类名。因为它由5个类组成。
希望这会有所帮助。
答案 2 :(得分:0)
我会尝试
的较短的类选择器driver.find_element_by_css_selector('.tv-button').click()
答案 3 :(得分:0)
尝试诱导WebDriverWait
来标识元素,然后单击它。
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
element=WebDriverWait(driver,30).until(EC.element_to_be_clickable((By.CSS_SELECTOR,'button.tv-button span')))
print(element.text)
element.click()
答案 4 :(得分:0)
该元素是动态元素,因此要定位并单击该元素,您必须为element_to_be_clickable()
引入 WebDriverWait ,并且可以使用以下任一解决方案:
使用CSS_SELECTOR
:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "button.tv-button--no-border-radius.tv-button--loader>span.tv-button__text"))).click()
使用XPATH
:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//button[@class='tv-button tv-button--no-border-radius tv-button--size_large tv-button--primary_ghost tv-button--loader']/span[@class='tv-button__text' and text()='Log In']"))).click()
注意:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC