簡體   English   中英

如何強制 Selenium Python 點擊正確的按鈕?

[英]How do I force Selenium Python to click on the correct button?

我是 Selenium 的新手,我正在嘗試在此站點上構建一個抓取工具,單擊“16. token URI”按鈕,在輸入字段中輸入一個數字,然后單擊“查詢”按鈕。 但是無論我如何定義要單擊的元素,Selenium 都會單擊不同的按鈕,即使我已經完全復制了 XPATH。 顯然,在我解決這個問題之前,我無法進入接下來的兩個步驟。 如何強制 Selenium 向下滾動到第 16 個按鈕並單擊它?


from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.service import Service

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
from selenium.webdriver.common.keys import Keys
from selenium.common.exceptions import TimeoutException
import time

service = Service(executable_path=ChromeDriverManager().install())
driver = webdriver.Chrome(service=service)
driver.maximize_window()

driver.get("https://etherscan.io/address/0xd0318da435dbce0b347cc6faa330b5a9889e3585#readContract")
assert "ASMBrain" in driver.title

try:
    delay = 5
    WebDriverWait(driver, delay).until(EC.frame_to_be_available_and_switch_to_it((By.ID, "readcontractiframe")))
    element = driver.find_element(By.XPATH, "//*[@id='readHeading16']/a")
    # ActionChains(driver).move_to_element(element).click().perform()
    driver.execute_script("arguments[0].scrollIntoView(true);", element)
    WebDriverWait(driver, delay).until(EC.visibility_of((element))).click()
    # driver.find_element(By.XPATH, "//input[@id='input_16_1']").send_keys('10')
    # driver.find_element(By.XPATH, "//button[@id='btn_16']").click()
    time.sleep(30)
    driver.quit()   
    print("Page is ready!")
except TimeoutException:
    print("Loading took too much time!")

我建議使用不同的 xpath。 嘗試使用a標簽的 href。

element = driver.find_element(By.XPATH, "//a[@href='#readCollapse16']")
Message: element click intercepted: Element <iframe width="100%" id="readcontractiframe" src="/readContract?m=normal&amp;a=0xd0318da435dbce0b347cc6faa330b5a9889e3585&amp;v=0xd0318da435dbce0b347cc6faa330b5a9889e3585" frameborder="0" scrolling="no" style="height: 1019px; padding: 0px 0.5px;" cd_frame_id_="5f818ce91d8292c77481277348168d1d"></iframe> is not clickable at point (674, 633). Other element would receive the click: <div class="alert alert-light border shadow p-3" role="alert">...</div>
  (Session info: chrome=96.0.4664.110)

您首先對彈出窗口進行了元素點擊攔截處理。

wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,"#btnCookie"))).click()
try:
    wait.until(EC.frame_to_be_available_and_switch_to_it((By.ID, "readcontractiframe")))
    elem=wait.until(EC.element_to_be_clickable((By.XPATH,"//a[contains(.,'tokenURI')]")))
    elem.click()
    print("Page is ready!")
except Exception as e:
    print(str(e))
    print("Loading took too much time!")

暫無
暫無

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

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