我目前正在从事一个自动填写表格的项目。填写表单后,出现下一个按钮,这就是为什么它给我一个错误。
我尝试过:
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH,"//input[@type='button' and @class='button']")))
Next = driver.find_element_by_xpath("//input[@type='button' and @class='button']")
Next.click()
HTML:
<span class="btn">
<input type="button" value="Next" class="button" payoneer="Button" data-controltovalidate="PersonalDetails" data-onfieldsvalidation="ToggleNextButton" data-onclick="UpdateServerWithCurrentSection();" id="PersonalDetailsButton">
</input>
<div class="clearfix"></div>
</span>
错误:
selenium.common.exceptions.ElementClickInterceptedException:消息: 元素点击被拦截:元素在点(203,530)不可点击。 其他元素将获得点击:...(会话信息:chrome = 76.0.3809.132)
答案 0 :(得分:1)
我遇到了类似的问题,.click() 总是返回一个 Not clickable 异常。
driver.execute_script('arguments[0].click()', button)
有魔法。你也可以用它来执行任何其他的js脚本
script = 'your JavaScript goes here'
element = driver.find_element_by_*('your element identifier goes here')
driver.execute_script(script, element)
答案 1 :(得分:0)
看起来还有其他一些具有相同xpath的元素,尝试像这样更改xpath
Next = driver.find_element_by_xpath("//input[@id='PersonalDetailsButton']");
Next.Click();
或
Next = driver.find_element_by_xpath(//input[@value='Next' and @id='PersonalDetailsButton']);
Next.Click();
如果第一个xpath不起作用,请尝试第二个。如果那也不起作用,请尝试使用sikuli。我很确定第一个xpath可以工作
答案 2 :(得分:0)
如果 xpath 的路径正确,则可以尝试使用此方法来解决此问题。将旧代码替换为以下代码:
button = driver.find_element_by_xpath("xpath"]")
driver.execute_script("arguments[0].click();", button)
我之前已经解决了这个问题,但是老实说,我不知道原因。
答案 3 :(得分:0)
我查看了导致它的确切元素,它是关于同意/ cookie的标语。因此,首先,我确保它单击了同意横幅上的“确定”,然后单击了我需要的另一个按钮。希望它可以帮助某人。
答案 4 :(得分:0)
我遇到了类似的问题,并且观察到一些可能有助于理解问题根源的东西。就我而言,我可以单击网站处于PC视图模式的某个元素,但无法在移动视图中单击(我需要运行脚本)。我发现在移动视图中,元素的顺序(在我的情况下为li)在html文档中保持不变的情况下发生了变化。这就是为什么我没有真正 先滚动到它 就无法单击它的原因。它还可能解释了为什么这样做:-
driver.execute_script("arguments[0].click();", button)
答案 5 :(得分:-1)
此错误消息...
selenium.common.exceptions.ElementClickInterceptedException: Message: element click intercepted: Element is not clickable at point (203, 530). Other element would receive the click: ... (Session info: chrome=76.0.3809.132)
......意味着所需元素上的click()
被其他元素拦截,并且所需元素不可点击。
您需要考虑以下几点:
time.sleep(secs)
却没有实现任何特定条件的情况 自动化 的目的,应不惜一切代价避免。根据文档:
time.sleep(secs)
在给定的秒数内暂停当前线程的执行。该参数可以是浮点数,以指示更精确的睡眠时间。实际的暂停时间可能少于请求的暂停时间,因为任何捕获到的信号都会在执行该信号的捕获例程后终止sleep()。另外,由于系统中其他活动的安排,暂停时间可能比请求的时间长任意数量。
click()
方法。要单击具有 value 作为 Next 的按钮,可以使用以下Locator Strategies之一:
使用CSS_SELECTOR
:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input.button#PersonalDetailsButton[data-controltovalidate='PersonalDetails']"))).click()
使用XPATH
:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@class='button' and @id='PersonalDetailsButton'][@data-controltovalidate='PersonalDetails']"))).click()
注意:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC