簡體   English   中英

無法點擊按鈕 - Python / Selenium & bs4

[英]Unable to click button - Python / Selenium & bs4

我試圖單擊一個按鈕並嘗試了幾種不同的方法但無濟於事。

方法一:

WebDriverWait(driver, 20).until(EC.invisibility_of_element((By.CLASS_NAME, 'sc-gsDKAQ fWOgSr')))
driver.execute_script("arguments[0].click();", WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CLASS_NAME, 'sc-gsDKAQ fWOgSr'))))

方法二:

driver.find_element(by=By.CLASS_NAME, value='sc-gsDKAQ fWOgSr').click()

方法三:

btn = driver.find_element(by=By.CLASS_NAME, value='sc-gsDKAQ fWOgSr')
btn.click()

錯誤信息:

M1:超時

M2:NoSuchElementException

M3:NoSuchElementException

我通過查看 Xpath 進行了同樣的嘗試,但沒有成功。 過去有另一個錯誤,指出無法與“字符串”交互。

該元素位於#shadow root元素中,因此很難達到。 此外,頁面似乎會對鼠標移動做出反應(並且僅在檢測到鼠標移動后才加載)。 以下代碼似乎有效:設置在 Linux 上,但您可以對其進行調整,只需觀察導入和定義瀏覽器后的部分即可:

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
from selenium.webdriver.common.action_chains import ActionChains


chrome_options = Options()
chrome_options.add_argument("--no-sandbox")
chrome_options.add_argument('disable-notifications')
import time as t


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

actions = ActionChains(browser)

url = 'https://www.immobilienscout24.at/regional/wien/wien/wohnung-kaufen'

browser.get(url) 

page_title = WebDriverWait(browser, 3).until(EC.presence_of_element_located((By.CSS_SELECTOR, "a[title='Zur Homepage']")))
actions.move_to_element(page_title).perform()
parent_div = WebDriverWait(browser, 20000).until(EC.presence_of_element_located((By.ID, "usercentrics-root"))) 
shadowRoot = browser.execute_script("return arguments[0].shadowRoot", parent_div)

try:
    button = WebDriverWait(shadowRoot, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "button[data-testid='uc-accept-all-button']"))) 
    button.click()
    print('clicked')
except Exception as e:
    print(e)
    print('no click button')

這將單擊按鈕,並在終端中打印:

clicked

暫無
暫無

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

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