【问题标题】:Can't get selenium to click button无法让硒单击按钮
【发布时间】:2020-12-05 13:38:02
【问题描述】:

Pic of the website's inspect element More in Depth pic 我的代码sn-p

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from time import sleep
import requests
///
excel = driver.find_element_by_name('Excel')
excel.click()

然后当我尝试运行它时,我会得到这个,任何帮助将不胜感激

NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"[name="Excel"]"}

【问题讨论】:

  • 可以分享一下网址吗?由于 Excel 可能嵌套在某些元素中,因此可能无法直接访问它。你可以参考这个链接stackoverflow.com/questions/50354465/…
  • 我正在自动化一些工作流程,这个 URL 与我的工作有关,所以我不想分享,我相信你明白。我可以分享任何其他类型的信息吗?

标签: python selenium xpath css-selectors webdriverwait


【解决方案1】:

所需元素是Angular 元素,因此要单击该元素,您必须将WebDriverWait 诱导为element_to_be_clickable(),您可以使用以下Locator Strategies 之一:

  • 使用CSS_SELECTOR

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "button[mat-button] > span.mat-button-wrapper span"))).click()
    
  • 使用XPATH

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//button[@mat-button]/span[@class='mat-button-wrapper']//span[text()='Excel']"))).click()
    
  • 注意:您必须添加以下导入:

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

【讨论】:

  • 感谢您的意见,我确实设法找到了不同的解决方案来解决我的问题,但我确实运行了您的解决方案并且它也有效!
  • 我将不得不阅读角度元素,因为我不知道如何管理它们,还要确保为你投票
【解决方案2】:

driver.find_element_by_name('Excel') 选择 name='Excel' 的标签。

例如,它会找到这样的标签:

<div name='Excel'>Hello</div>.

find_element_by_name 的 CSS 等效项是 [name="Excel"]。

从您网站的检查元素图片来看,您似乎正试图在 div 中查找带有文本“Excel”的元素,因此,您需要使用以下函数:

driver.find_element_by_link_text('Excel')

希望有所帮助!

有关 Python selenium webdriver 的更多信息,请使用this link。这对我帮助很大!

【讨论】:

  • 你好,我刚试过这个方法,得到了这个错误 NoSuchElementException Traceback (最近一次调用最后) in 43 apply.click() 44 sleep(3) ---> 45 excel = driver.find_element_by_link_text('Excel') 46 excel.click()
  • 啊,我明白了,很抱歉,我没有意识到您正在点击跨度。单击 link_text 可能仅适用于 标记。我建议你试试 driver.find_element_by_css_selector('.mat-button-wrapper span') 然后!
  • 一旦我打印它以查看元素?我将它设置为点击,它给了我同样的错误,对不起,如果我问了很多问题,仍然是全新的。
  • 嗯...似乎 span 实际上不是可点击的元素。你绝对需要点击它吗?如果你真的这样做,我建议你研究一下如何在 JavaScript 中做到这一点,因为驱动程序可以使用 driver.execute_script() 执行 JavaScript 代码。但是,如果您只是简单地执行 driver.find_element_by_css_selector("button.mat-focus-indicator") 我认为它也可以正常工作。先试试后者。
  • 好的,所以我设法找到了一个解决方法 excel = driver.find_element_by_xpath("//button[3]") actions = webdriver.common.action_chains.ActionChains(driver) actions.move_to_element_with_offset(excel, 20, 20) actions.click() actions.perform()
猜你喜欢
  • 1970-01-01
  • 2017-12-17
  • 2021-12-11
  • 2021-12-08
  • 1970-01-01
  • 1970-01-01
  • 2021-05-08
相关资源
最近更新 更多