使用 selenium Python 单击 javascript 按钮

问题描述 投票:0回答:3
javascript python selenium-webdriver
3个回答
6
投票

我猜这是一个框架问题。

即使您有一个完全正确的 XPATH,Selenium 也不会看到该元素,除非您已经位于包含该元素的框架中

要快速查看您所在页面上有多少帧:

a = driver.find_elements_by_css_selector("frame")
print(len(a))

如果您发现有,比如说,三个框架,您可以这样做:

driver.switch_to_frame(a[0])
button.click()

driver.switch_to_frame(a[1])
button.click()

driver.switch_to_frame(a[2])
button.click()

0
投票

您可以使用以下方式来定位您的元素

find_element_by_id
find_element_by_name
find_element_by_xpath
find_element_by_link_text
find_element_by_partial_link_text
find_element_by_tag_name
find_element_by_class_name
find_element_by_css_selector

请参阅文档http://selenium-python.readthedocs.io/ located-elements.html

一些相同的例子如下

1。通过 CSS 选择器

driver.find_element_by_css_selector('.button.c_button.s_button').click()

2。按名字

driver.find_element_by_name('s_image').click()

3.按类名

driver.find_element_by_class_name('s_image').click()

0
投票

您应该尝试在点击按钮之前添加一些等待时间,如下所示:

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

button = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.ID, "btnNew")));
button.click();

使用上述代码,您最多可以等待 20 秒以使目标按钮变得可点击。否则你会得到

TimeOutException

如果此解决方案不起作用,请检查您的按钮是否位于

<iframe>
元素内。如果是这样,请在单击按钮之前切换到该框架:

driver.switch_to_frame('iframe_id')
© www.soinside.com 2019 - 2024. All rights reserved.