【问题标题】:Python + Selenium -- Unable to locate image element (Can't click image)Python + Selenium -- 无法定位图像元素(无法单击图像)
【发布时间】:2020-08-10 16:47:44
【问题描述】:

我正在尝试创建一个宏来打开我在 Chrome 上的所有在线课程(因为登录很烦人,尤其是如果您每天早上必须登录 8 次)。

顺便说一句,我使用 Python 3.8、Chrome 81.0.4044.122 和最新版本的 Selenium。

直到现在,我点击按钮使用: driver = webdriver.Chrome() driver.find_element_by_xpath("PATH_OF_ELEMENT").click() 然后我找到了一个登录按钮,它有一个图像而不是文本。 我试过 XPath、CSS Selector、id、name、文本链接、ActionChains (move_to) 都没有用。

这是 HTML: here click me please.

我要按下的按钮是带有 a 标签的那个。

我花了 30 分钟在谷歌上搜索,发现的只是 6 年前的 Stack Overflow 问题。他们建议我使用 WebDriverWait 或更改框架。他们都没有工作(我可能犯了一个错误)。我是 Selenium 的新手,所以请善待并解释困难的事情。

如何找到图像按钮的正确 XPath 并单击它?

driver.find_element_by_css_selector('.nice-select').click() driver.find_element_by_xpath("/html/body/div1/div[3]/div/div/div/div/div/div2/div1/div/ul/li2") 。点击() driver.find_element_by_xpath('/html/body/div1/div[3]/div/div/div/div/div/div2/div2/div/span').click() driver.find_element_by_xpath('/html/body/div1/div[3]/div/div/div/div/div/div2/div2/div/ul/li[19]') 。点击() driver.find_element_by_xpath('/html/body/div1/div[3]/div/div/div/div/div/div2/div[3]/div/span').click() driver.find_element_by_xpath('/html/body/div1/div[3]/div/div/div/div/div/div2/div[3]/div/ul/li[3]') 。点击() driver.find_element_by_xpath('/html/body/div1/div[3]/div/div/div/div/div/div2/div[4]/div/span').click() driver.find_element_by_xpath('/html/body/div1/div[3]/div/div/div/div/div/div2/div[4]/div/ul/li[3]') 。点击() driver.find_element_by_xpath('/html/body/div1/div[3]/div/div/div/div/div/div2/div[5]/a').click()

【问题讨论】:

  • 提供更多信息:示例代码、网站等。我们无法猜测您尝试了什么以及网站的实际实现是什么。
  • 这不是重点,我只需要能够找到正确的 Xpath 并单击图像。
  • 你在找这个吗? //a/img[@src and @alt='mypicture']
  • 我试过 driver.find_element_by_css_selector('/​​/a/img[@src and @alt=mypicture).click() 它说 selenium.common.exceptions.InvalidSelectorException: Message: invalid selector: An invalid或指定了非法选择器(会话信息:chrome=81.0.4044.122)
  • 将您的 HTML 放入您的问题中。谢谢。

标签: python selenium


【解决方案1】:

试试下面的 CSS 选择器:

.my_menu>a

代码应如下所示:

driver.find_element_by_css_selector(".my_menu>a").click()

另外,尝试使用显式等待来定位元素:

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


WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, ".my_menu>a"))).click()

我已经使用以下代码块进行了测试(结果将显示带有 2 个选项的弹出窗口):

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


driver = webdriver.Chrome()
driver.get("https://oc31.ebssw.kr/onlineClass/search/onlineClassSearchView.do?schulCcode=00898&schCssTyp=online_mid")
WebDriverWait(driver, 20).until(EC.element_to_be_clickable(
    (By.CSS_SELECTOR, ".my_menu>a"))).click()
time.sleep(5)

希望对你有帮助!

【讨论】:

  • selenium.common.exceptions.NoSuchElementException: 消息:没有这样的元素:无法找到元素:{"method":"css selector","selector":".my_menu.active>a"} (会话信息:chrome=81.0.4044.122)
  • @Jooney,在这种情况下分享你的 URL。谢谢。
  • @Jooney,查看我的更新答案。我有测试仪,它可以工作。谢谢。
  • 超时异常错误
猜你喜欢
  • 2018-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多