簡體   English   中英

selenium python不能點擊按鈕(應該很快)

[英]selenium python cant click button (should be quick)

試圖點擊什么

<div class="accBtn button buttonP" onclick="registerAcc()">Register</div>

如果您訪問 krunker.io 並檢查,然后只需 ctrl f“注冊”,您應該會找到它

這是我的代碼

driver.find_element(By.CLASS_NAME,"Register").click()

錯誤是“沒有這樣的元素”

這是一個內容非常豐富的網站,因此與之交互的一種方式是:

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC


chrome_options = Options()
chrome_options.add_argument("--no-sandbox")
# chrome_options.add_argument("--headless")


webdriver_service = Service("chromedriver/chromedriver") ## path to where you saved chromedriver binary
browser = webdriver.Chrome(service=webdriver_service, options=chrome_options)

url = 'https://krunker.io'

browser.get(url)

WebDriverWait(browser, 200000).until(EC.element_to_be_clickable((By.ID, "onetrust-accept-btn-handler"))).click()
print('Accepted terms')
WebDriverWait(browser, 200000).until(EC.element_to_be_clickable((By.XPATH, "// div[contains(text(), 'Login or Register')]"))).click()
print('clicked login/register')
WebDriverWait(browser, 200000).until(EC.element_to_be_clickable((By.CLASS_NAME,"buttonP"))).click()
print('clicked Register button')

我試圖打開krunker.io ,發現寄存器不像你描述的那樣。 正如您在問題中所述,正確的代碼是:

driver.find_element(By.CLASS_NAME,"accBtn button buttonP").click()

對比我的代碼和你的代碼,你會發現類名就在“div class=”后面

此外,您需要在代碼工作之前找到正確的 html 代碼位置

Krunker網站使用AJAX調用。


解決方案

要單擊元素注冊,您需要為element_to_be_clickable()誘導WebDriverWait ,您可以使用以下定位器策略

driver.execute("get", {'url': 'https://krunker.io/'})
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//button[@id='onetrust-accept-btn-handler']"))).click()
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[@id='signedOutHeaderBar' and contains(., 'Login or Register')]"))).click()
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[@class='accBtn button buttonP' and text()='Register']"))).click()

注意:您必須添加以下導入:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM