我试图单击这样的链接:
<div class="loading" style="display:none;">
<p class="btn blue"><span>さらに表示</span></p>
<a href="javascript:void(0);" onclick="get_more();"></a>
</div>
我使用了这段代码:
element = WebDriverWait(driver, 30).until(lambda x: x.find_element_by_css_selector(".btn.blue")) # @UnusedVariable
element.click()
我遇到这样的错误,该怎么办?
selenium.common.exceptions.WebDriverException: Message: unknown error: Element <p class="btn blue">...</p> is not clickable at point (391, 577). Other element would receive the click: <a href="javascript:void(0);" onclick="get_more();"></a>
(Session info: headless chrome=69.0.3497.100)
(Driver info: chromedriver=2.41.578737 (49da6702b16031c40d63e5618de03a32ff6c197e),platform=Windows NT 6.1.7601 SP1 x86_64)
答案 0 :(得分:4)
您尝试单击的元素已被其他元素覆盖,因此该元素获得点击而不是点击实际元素。可能存在以下情况:
案例1 。可以说它是一个加载器,它是在元素获得加载并在一段时间后变得不可见时出现的。
解决方案:在这里,您必须等待加载程序变得不可见,然后才能单击实际元素
$translate.instant('MINLENGTH', { element: element, value: minlength })
案例2 。如果使用浏览器尺寸,则实际元素不可见,并被某些叠加元素覆盖。
解决方案::在这里,您需要滚动到所需的元素,然后必须执行点击操作
from selenium.webdriver.support import expected_conditions as EC
wait = WebDriverWait(driver, 10)
element = wait.until(EC.invisibility_of_element_located((By.ID, 'loader_element_id')))
element_button = wait.until(EC.element_to_be_clickable((By.ID, 'your_button_id')))
element_button.click()
使用OR可以像这样使用from selenium.webdriver.common.action_chains import ActionChains
element = driver.find_element_by_id("your_element_id")
actions = ActionChains(driver)
actions.move_to_element(element).perform()
:
execute_script
或使用JavaScript进行点击
driver.execute_script("arguments[0].scrollIntoView();", element)
注意:如果需要,请根据Python语法进行必要的更正。
答案 1 :(得分:0)
您可以使用操作类来单击您的元素,
from selenium.webdriver import ActionChains
actions = ActionChains(driver)
actions.move_to_element(element).click().perform()
答案 2 :(得分:0)
根据 HTML 和您的代码试验,您尝试单击<span>
标记,而不是尝试调用click()
在<a>
标签上,如下所示:
使用css_selector
:
element = WebDriverWait(driver, 30).until(lambda x: x.find_element_by_css_selector("div.loading a[onclick^='get_more']"))
element.click()
使用xpath
:
element = WebDriverWait(driver, 30).until(lambda x: x.find_element_by_xpath("//p[@class='btn blue']/span[contains(.,'さらに表示')]//following::a[contains(@onclick,'get_more')]"))
element.click()