为什么硒中的命令可以单独起作用,但是如果在脚本中放置硒,则可以找到元素

发布于 2025-02-01 12:22:00 字数 606 浏览 2 评论 0原文

我面临的问题是,当我运行整个脚本时,它会抛出元素的错误,无法单击或找不到。当我运行命令时,命令起作用。

如果有人能解释原因和为什么它以这种方式表现出来,我将非常感激。

CodeeXample:

driver.find_element(By.XPATH, "//div[@id=\'Content_C164_Col00\']/div/div/div[2]/div/div/div/div/div/button/span/span/span[3]").click()
driver.find_elements(By.CLASS_NAME, "fxs_c_datepicker_button")[1].click()
driver.find_element(By.CLASS_NAME, "fxs_btn.fxs_btn_cta.fxs_fRight").click()

错误:

ElementClickInterpectedException:消息:元素单击截距:元素...在点(238,772)处不可单击。其他元素会单击:... (会话信息:chrome = 101.0.4951.64) StackTrace: backtrace:

我正在担任我的编辑。

The problem i am facing is when i run the whole script it throws error of element not clickable or not found. While when i run it command per command it works.

If anyone can explain the reason and why it behaves this way i ll be very grateful.

codeExample:

driver.find_element(By.XPATH, "//div[@id=\'Content_C164_Col00\']/div/div/div[2]/div/div/div/div/div/button/span/span/span[3]").click()
driver.find_elements(By.CLASS_NAME, "fxs_c_datepicker_button")[1].click()
driver.find_element(By.CLASS_NAME, "fxs_btn.fxs_btn_cta.fxs_fRight").click()

ERROR:

ElementClickInterceptedException: Message: element click intercepted: Element ... is not clickable at point (238, 772). Other element would receive the click: ...
(Session info: chrome=101.0.4951.64)
Stacktrace:
Backtrace:

I am working in VS code as my editor.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

缺⑴份安定 2025-02-08 12:22:00

我重现了您的问题,并出现了同样的错误。我为修复它所做的只是在单击元素之前滚动到元素。
尝试一下

driver.find_element(By.XPATH, "//div[@id=\'Content_C164_Col00\']/div/div/div[2]/div/div/div/div/div/button/span/span/span[3]").click()
driver.find_elements(By.CLASS_NAME, "fxs_c_datepicker_button")[1].click()

actions = ActionChains(driver)

button = driver.find_element(By.CLASS_NAME, "fxs_btn.fxs_btn_cta.fxs_fRight")
actions.move_to_element(button)
button.click()

,我还注意到几秒钟后,网站上出现了弹出窗口。确保单击一个,因为它可能会拦截单击“应用”按钮。

更新:
这是从打开网站到选择日期并单击“应用”按钮的完整代码。

from selenium import webdriver 
from selenium.webdriver.chrome.service import Service 
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
from webdriver_manager.chrome import ChromeDriverManager

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

# Opening browser and maximizing it
driver.get("https://www.fxstreet.com/economic-calendar")
driver.maximize_window()

# Click 'Continue to site'
driver.find_element(By.CLASS_NAME, "fxs_prestitial-continue").click()

# Wait until popup appears and cancel it
driver.implicitly_wait(10)
driver.find_element(By.XPATH, "//button[@id='onesignal-slidedown-cancel-button' and text()='Cancel']").click()

# Click the datepicker button and choose date
driver.find_element(By.XPATH, "//div[@id=\'Content_C164_Col00\']/div/div/div[2]/div/div/div/div/div/button/span/span/span[3]").click()
driver.find_elements(By.CLASS_NAME, "fxs_c_datepicker_button")[1].click()

# Creating actions instance
actions = ActionChains(driver)

# Scrolling to 'Apply' button and clicking it
button = driver.find_element(By.CLASS_NAME, "fxs_btn.fxs_btn_cta.fxs_fRight")
actions.move_to_element(button)
button.click()

I reproduced your problem and had the same error. What i did to fix it is just scroll to the element before clicking it.
Try this out

driver.find_element(By.XPATH, "//div[@id=\'Content_C164_Col00\']/div/div/div[2]/div/div/div/div/div/button/span/span/span[3]").click()
driver.find_elements(By.CLASS_NAME, "fxs_c_datepicker_button")[1].click()

actions = ActionChains(driver)

button = driver.find_element(By.CLASS_NAME, "fxs_btn.fxs_btn_cta.fxs_fRight")
actions.move_to_element(button)
button.click()

I also noticed that after a few seconds a popup appears on the website. Make sure you click that one away as it may intercept the click on the apply button.

Update:
Here's the full code from opening the website to selecting date and clicking the apply button.

from selenium import webdriver 
from selenium.webdriver.chrome.service import Service 
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
from webdriver_manager.chrome import ChromeDriverManager

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

# Opening browser and maximizing it
driver.get("https://www.fxstreet.com/economic-calendar")
driver.maximize_window()

# Click 'Continue to site'
driver.find_element(By.CLASS_NAME, "fxs_prestitial-continue").click()

# Wait until popup appears and cancel it
driver.implicitly_wait(10)
driver.find_element(By.XPATH, "//button[@id='onesignal-slidedown-cancel-button' and text()='Cancel']").click()

# Click the datepicker button and choose date
driver.find_element(By.XPATH, "//div[@id=\'Content_C164_Col00\']/div/div/div[2]/div/div/div/div/div/button/span/span/span[3]").click()
driver.find_elements(By.CLASS_NAME, "fxs_c_datepicker_button")[1].click()

# Creating actions instance
actions = ActionChains(driver)

# Scrolling to 'Apply' button and clicking it
button = driver.find_element(By.CLASS_NAME, "fxs_btn.fxs_btn_cta.fxs_fRight")
actions.move_to_element(button)
button.click()
傾旎 2025-02-08 12:22:00

我测试了一个有效的新版本:

WebDriverWait(driver, 120).until(EC.element_to_be_clickable((By.ID, "onesignal-slidedown-cancel-button"))).click()

while True:
    try:
        studio = driver.find_element(By.CLASS_NAME, "fxs_headline_tiny").text
        # print(studio)
        driver.execute_script("window.scrollTo(0, 450)")
        driver.find_element(By.CLASS_NAME, "fxs_icon.fa-calendar-alt.fa-w-14").click()
        time.sleep(0.5)
        exact_date = driver.find_elements(By.CLASS_NAME, "fxs_c_datepicker_button")
        for i in range(len(exact_date)):
            exact_date_i = exact_date[i].text
            if(exact_date_i == "Today"):
                time.sleep(2)
                exact_date[i].click()
                break

            
        break
    except:
        print("Studio not found")
driver.find_element(By.CLASS_NAME, "fxs_btn.fxs_btn_cta.fxs_fRight").click()

I tested a new version that works:

WebDriverWait(driver, 120).until(EC.element_to_be_clickable((By.ID, "onesignal-slidedown-cancel-button"))).click()

while True:
    try:
        studio = driver.find_element(By.CLASS_NAME, "fxs_headline_tiny").text
        # print(studio)
        driver.execute_script("window.scrollTo(0, 450)")
        driver.find_element(By.CLASS_NAME, "fxs_icon.fa-calendar-alt.fa-w-14").click()
        time.sleep(0.5)
        exact_date = driver.find_elements(By.CLASS_NAME, "fxs_c_datepicker_button")
        for i in range(len(exact_date)):
            exact_date_i = exact_date[i].text
            if(exact_date_i == "Today"):
                time.sleep(2)
                exact_date[i].click()
                break

            
        break
    except:
        print("Studio not found")
driver.find_element(By.CLASS_NAME, "fxs_btn.fxs_btn_cta.fxs_fRight").click()
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文