鱼C论坛

 找回密码
 立即注册
查看: 1867|回复: 17

selenium点击这个元素

[复制链接]
发表于 2023-5-20 13:29:27 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 歌者文明清理员 于 2023-5-20 13:32 编辑

如题,,,死活不能点到
<button class="transition text-neutral-300 hover:text-neutral-800 dark:hover:text-neutral-200"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class=" iconify iconify--ri" width="1em" height="1em" viewBox="0 0 24 24"><path fill="currentColor" d="M12 3c-1.1 0-2 .9-2 2s.9 2 2 2s2-.9 2-2s-.9-2-2-2Zm0 14c-1.1 0-2 .9-2 2s.9 2 2 2s2-.9 2-2s-.9-2-2-2Zm0-7c-1.1 0-2 .9-2 2s.9 2 2 2s2-.9 2-2s-.9-2-2-2Z"></path></svg></button>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-5-20 13:29:55 | 显示全部楼层
您好,这个问题可能是由于以下原因导致的:

1. 元素未加载:如果元素未加载完成,尝试等待一段时间再尝试点击。

2. 元素被其他元素遮挡:如果元素被其他元素遮挡,可以尝试使用Selenium的ActionChains类来模拟鼠标移动到元素上并点击。

3. 元素不可点击:如果元素被设置为不可点击,可以尝试使用JavaScript来模拟点击。

下面是一个示例代码,它使用了ActionChains类来点击元素:
from selenium.webdriver import ActionChainselement = driver.find_element_by_id("element_id")actions = ActionChains(driver)actions.move_to_element(element).click().perform()
希望这可以帮助您解决问题。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-5-20 13:31:38 | 显示全部楼层
[quote][url=forum.php?mod=redirect&goto=findpost&pid=6239203&ptid=228526]isdkz 发表于 2023-5-20 13:29[/url]
您好,这个问题可能是由于以下原因导致的:

1. 元素未加载:如果元素未加载完成,尝试等待一段时间再尝试 ...[/quote]

E:\Python\e\venv\Scripts\python.exe E:\python\e\main.py 
Traceback (most recent call last):
  File "E:\python\e\main.py", line 10, in <module>
    answer = ai.ask(question)
  File "E:\python\e\gpt.py", line 39, in ask
    ActionChains(self.driver).move_to_element(self.driver.find_element(
  File "D:\Python\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 831, in find_element
    return self.execute(Command.FIND_ELEMENT, {"using": by, "value": value})["value"]
  File "D:\Python\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 440, in execute
    self.error_handler.check_response(response)
  File "D:\Python\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 245, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.InvalidSelectorException: Message: invalid selector: An invalid or illegal selector was specified
  (Session info: chrome=113.0.5672.127)
Stacktrace:
Backtrace:
        GetHandleVerifier [0x004F8893+48451]
        (No symbol) [0x0048B8A1]
        (No symbol) [0x00395058]
        (No symbol) [0x003983F1]
        (No symbol) [0x00399631]
        (No symbol) [0x003996D0]
        (No symbol) [0x003C00C0]
        (No symbol) [0x003C069B]
        (No symbol) [0x003EDD92]
        (No symbol) [0x003DA304]
        (No symbol) [0x003EC482]
        (No symbol) [0x003DA0B6]
        (No symbol) [0x003B7E08]
        (No symbol) [0x003B8F2D]
        GetHandleVerifier [0x00758E3A+2540266]
        GetHandleVerifier [0x00798959+2801161]
        GetHandleVerifier [0x0079295C+2776588]
        GetHandleVerifier [0x00582280+612144]
        (No symbol) [0x00494F6C]
        (No symbol) [0x004911D8]
        (No symbol) [0x004912BB]
        (No symbol) [0x00484857]
        BaseThreadInitThunk [0x75FB00C9+25]
        RtlGetAppContainerNamedObjectPath [0x773B7B4E+286]
        RtlGetAppContainerNamedObjectPath [0x773B7B1E+238]


进程已结束,退出代码1
<button class="transition text-neutral-300 hover:text-neutral-800 dark:hover:text-neutral-200"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class=" iconify iconify--ri" width="1em" height="1em" viewBox="0 0 24 24"><path fill="currentColor" d="M12 3c-1.1 0-2 .9-2 2s.9 2 2 2s2-.9 2-2s-.9-2-2-2Zm0 14c-1.1 0-2 .9-2 2s.9 2 2 2s2-.9 2-2s-.9-2-2-2Zm0-7c-1.1 0-2 .9-2 2s.9 2 2 2s2-.9 2-2s-.9-2-2-2Z"></path></svg></button>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-20 13:38:09 | 显示全部楼层

看起来应该是你的选择器的语法错了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-5-20 13:38:25 | 显示全部楼层
isdkz 发表于 2023-5-20 13:38
看起来应该是你的选择器的语法错了


那正确的选择器语法应该是?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-20 13:39:33 | 显示全部楼层

ActionChains(self.driver).move_to_element(self.driver.find_element(  这一句后面是怎么写的?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-5-20 13:40:45 | 显示全部楼层
本帖最后由 歌者文明清理员 于 2023-5-20 13:50 编辑

isdkz 发表于 2023-5-20 13:39
ActionChains(self.driver).move_to_element(self.driver.find_element(  这一句后面是怎么写的?

ActionChains(self.driver).move_to_element(self.driver.find_element(
            By.CLASS_NAME, " iconify iconify--ri"
        )).click().perform()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-20 13:49:50 | 显示全部楼层

你传递给  find_element  方法的选择器是无效的。你正在试图用  By.CLASS_NAME  去查找一个元素,它的类名为  "iconify iconify--ri" 。

By.CLASS_NAME  只能用于单一的类名,不能用于包含空格的类名,因为在 HTML 中,一个元素可以有多个类名,类名之间用空格分隔。所以,当你尝试使用包含空格的字符串作为类名选择器时,Selenium 会认为这是一个无效的选择器。

如果你想要选择的元素有多个类名,你应该使用 CSS 选择器或 XPath。以下是一些例子:

· CSS 选择器: By.CSS_SELECTOR, ".iconify.iconify--ri"
· XPath: By.XPATH, "//*[@class='iconify iconify--ri']"

以上选择器将定位到具有 "iconify" 和 "iconify--ri" 两个类名的元素。请注意 CSS 选择器中的  .  在类名前面,和类名之间没有空格,这是因为在 CSS 选择器中,空格有特殊的含义。在 XPath 中, @class  是用来选择具有特定类属性的元素的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 0 反对 1

使用道具 举报

 楼主| 发表于 2023-5-20 13:51:34 | 显示全部楼层
本帖最后由 歌者文明清理员 于 2023-5-20 13:53 编辑

isdkz 发表于 2023-5-20 13:49
你传递给  find_element  方法的选择器是无效的。你正在试图用  By.CLASS_NAME  去查找一个元素,它的类 ...


没报错,可是没效果
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-20 13:53:11 | 显示全部楼层

报错了呀

Snipaste_2023-05-20_13-52-25.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-5-20 13:53:47 | 显示全部楼层


你也用snipaste?

我是说
By.XPATH, "//*[@class='iconify iconify--ri']"
没报错没效果
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-20 13:57:16 | 显示全部楼层
本帖最后由 isdkz 于 2023-5-20 13:59 编辑
歌者文明清理员 发表于 2023-5-20 13:53
你也用snipaste?

我是说没报错没效果


从哪里看出来是 snipaste?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-5-20 13:58:35 | 显示全部楼层
isdkz 发表于 2023-5-20 13:57
从哪里看出来是 snipaste?

从哪里看出来是 snipaste?
文件名
[b]
你那个报错就是这一句引发的呀

我是说,8#里你的代码没报错但是也没效果
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-20 13:59:59 | 显示全部楼层
歌者文明清理员 发表于 2023-5-20 13:58
文件名

我是说,8#里你的代码没报错但是也没效果

没报错应该是找到元素了,找不到也会报错的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-5-20 14:03:41 | 显示全部楼层
[url=forum.php?mod=redirect&goto=findpost&pid=6239230&ptid=228526]isdkz 发表于 2023-5-20 13:59[/url]
没报错应该是找到元素了,找不到也会报错的


8#找到了元素但没效果
ActionChains(self.driver).move_to_element(self.driver.find_element(
            By.XPATH, "//*[@class='iconify iconify--ri']"
        )).perform()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-20 14:17:48 | 显示全部楼层

你的代码移动到了指定元素,但是并没有包含一个  click()  操作。 perform()  方法只是执行这个链中的所有操作,如果链中没有  click()  操作,那么就不会有点击动作发生。

你的代码应该如下:
ActionChains(self.driver).move_to_element(self.driver.find_element(
    By.XPATH, "//*[@class='iconify iconify--ri']"
)).click().perform()

这段代码将会把鼠标移动到指定元素,并且点击这个元素。

如果你的代码还是没有效果,那么可能有以下几个原因:

1. 你想要的元素可能被其他元素遮挡。在这种情况下,Selenium 可能无法进行点击。你可以检查一下你的元素是否被其他元素遮挡。

2. 你的元素可能需要时间来加载。如果你在元素完全加载前就尝试点击,那么可能没有效果。你可以使用 WebDriverWait 来等待元素完全加载。

3. 你的元素可能在一个 iframe 中。如果你的元素在一个 iframe 中,那么你需要先切换到这个 iframe,然后再进行操作。

请检查一下这些可能的问题,如果还有问题,欢迎继续提问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-5-20 14:21:10 | 显示全部楼层
isdkz 发表于 2023-5-20 14:17
你的代码移动到了指定元素,但是并没有包含一个  click()  操作。 perform()  方法只是执行这个链中的所 ...

和刚才一样
程序没有退出,预期在你的代码后面还有操作,可没有执行,当手动关闭窗口时,程序提示你的代码报错,说找不到窗口
E:\Python\e\venv\Scripts\python.exe E:\python\e\main.py 
Traceback (most recent call last):
  File "E:\python\e\main.py", line 13, in <module>
    answer = ai.ask(question)
  File "E:\python\e\gpt.py", line 39, in ask
    ActionChains(self.driver).move_to_element(self.driver.find_element(
  File "D:\Python\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 831, in find_element
    return self.execute(Command.FIND_ELEMENT, {"using": by, "value": value})["value"]
  File "D:\Python\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 440, in execute
    self.error_handler.check_response(response)
  File "D:\Python\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 245, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: disconnected: unable to send message to renderer
  (failed to check if window was closed: disconnected: not connected to DevTools)
  (Session info: chrome=113.0.5672.127)
Stacktrace:
Backtrace:
        GetHandleVerifier [0x004F8893+48451]
        (No symbol) [0x0048B8A1]
        (No symbol) [0x00395058]
        (No symbol) [0x00386F40]
        (No symbol) [0x003875CA]
        (No symbol) [0x00396F11]
        (No symbol) [0x003974BF]
        (No symbol) [0x00399631]
        (No symbol) [0x003996D0]
        (No symbol) [0x003C00C0]
        (No symbol) [0x003C069B]
        (No symbol) [0x003EDD92]
        (No symbol) [0x003DA304]
        (No symbol) [0x003EC482]
        (No symbol) [0x003DA0B6]
        (No symbol) [0x003B7E08]
        (No symbol) [0x003B8F2D]
        GetHandleVerifier [0x00758E3A+2540266]
        GetHandleVerifier [0x00798959+2801161]
        GetHandleVerifier [0x0079295C+2776588]
        GetHandleVerifier [0x00582280+612144]
        (No symbol) [0x00494F6C]
        (No symbol) [0x004911D8]
        (No symbol) [0x004912BB]
        (No symbol) [0x00484857]
        BaseThreadInitThunk [0x75FB00C9+25]
        RtlGetAppContainerNamedObjectPath [0x773B7B4E+286]
        RtlGetAppContainerNamedObjectPath [0x773B7B1E+238]


进程已结束,退出代码1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-20 14:29:56 | 显示全部楼层
歌者文明清理员 发表于 2023-5-20 14:21
和刚才一样
程序没有退出,预期在你的代码后面还有操作,可没有执行,当手动关闭窗口时,程序提示你的代 ...

从你给出的错误信息看,错误类型是  selenium.common.exceptions.WebDriverException ,并且错误信息是 "disconnected: unable to send message to renderer",这说明 WebDriver 和浏览器之间的连接被中断了。而且你提到,当手动关闭窗口时,程序提示你的代码报错,说找不到窗口,这进一步确认了连接已经被中断。

这个问题可能的原因如下:

1. 你的 Selenium 会话可能在你的代码还在运行的时候被意外关闭了。你提到你手动关闭了窗口,这就可能是原因。当你关闭浏览器窗口或者标签页时,与之相关的 WebDriver 会话也会被关闭。

2. 浏览器崩溃或者被系统强制关闭。例如,有一些系统级的清理工具可能会强制关闭一些应用来释放系统资源。

3. Selenium 与浏览器的兼容性问题。确保你的 Selenium 和浏览器(Chrome)的版本匹配。如果版本不匹配,可能会导致一些未预期的问题。

为了解决这个问题,你可以试试以下几种方法:

1. 不要在你的代码还在运行的时候手动关闭浏览器窗口或者标签页。

2. 确保你的系统没有在你的代码运行的时候强制关闭浏览器。

3. 检查你的 Selenium 和浏览器的版本,确保它们匹配。如果你的 Chrome 是最新版的,那么你应该使用最新版的 Selenium。如果问题依然存在,你可以尝试使用旧一点的浏览器和 Selenium 版本,看是否有帮助。

如果问题依然存在,你可能需要提供更多的信息,以便更好地解决问题。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-23 03:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表