无法定位元素:python 爬行中的 css 选择器或 xpath
Posted
技术标签:
【中文标题】无法定位元素:python 爬行中的 css 选择器或 xpath【英文标题】:Unable to locate element: css selector or xpath in python crawling 【发布时间】:2019-01-25 21:24:36 【问题描述】:我想让 python 爬行。我已经登录了这个网站,想要发送_keys(keyword) 并点击按钮。我尝试查找 css 选择器或 xpath,但出现如下错误。
from selenium import webdriver as wd
import time
main_url2 = 'https://manage.searchad.naver.com/customers/668860/tool/keyword-planner'
driver.find_element_by_xpath('//*[@id="wrap"]/div/div/div[1]/div[1]/div/div/div/div[2]/div[1]/div[1]/div[2]/form/div[1]/div/div/textarea').send_keys(keyword)
keyword ='모기퇴치기'
这是错误信息如下
selenium.common.exceptions.NoSuchElementException: 消息:没有这样的 元素:无法定位元素: "method":"xpath","selector":"//*[@id="wrap"]/div/div/div1/div1/div/div/div/div[2] /div1/div1/div[2]/form/div1/div/div/textarea" (会话信息:chrome=68.0.3440.106)(驱动程序信息: 铬驱动程序=2.41.578737 (49da6702b16031c40d63e5618de03a32ff6c197e),平台=Windows NT 10.0.16299 x86_64)
这是chrome驱动的网站和资源图片。
enter image description here
【问题讨论】:
您是手动输入了 xpath,还是右键单击控制台中的元素并从那里复制 xpath? 第一次加载时页面上是否存在该元素,或者页面是否具有根据用户活动动态添加该元素的 javascript? 我在控制台中右键单击该元素并从那里复制它。 我学习了 2 周的编码,所以我不确定。我认为该页面具有基于用户活动动态添加该元素的 javascript。顶部区域的第三个菜单“도구”向下滚动并单击“키워드도구”,此页面显示 在这种情况下,您的脚本也必须执行相同的操作才能使该元素可用。 【参考方案1】:我有类似的问题,但这是一个竞争条件。在访问或发送密钥之前,驱动程序必须等待特定事件出现在页面中。
试试这个代码
try
Thread.Sleep(5000);
catch(Expression ex)
system.out.print(ex.getmessage());
发送密钥之前
或者只是把Thread.sleep(5000);
放在前面
注意:5000 相当于 5 秒或 5000 毫秒 首先尝试更大的数字,例如 10000 毫秒,然后减少时间。
【讨论】:
导入线程 Thread.sleep(5000); ModuleNotFoundError: No module named 'Thread' 我试图这样做,但是没有模块错误。 那是从 Java 的角度来看的。在 Python 的情况下,我认为是 - 使用这个 import 语句import time
- 在 sendkeys 之前使用这个 time.sleep(seconds)
感谢您的评论。有效~!!我试图解决这个问题几个小时,你节省了我的时间。再次感谢您。
不客气。这个解决方案是临时的,有比睡眠功能更好的有效方法(因为不推荐)。我建议你参考这个link 在 Python 中使用这样的等待。如果是 Java,我有比使用 Thread.sleep 更好的解决方案。以上是关于无法定位元素:python 爬行中的 css 选择器或 xpath的主要内容,如果未能解决你的问题,请参考以下文章
Python+Selenium练习篇之5-利用css定位元素
量角器+故事书:失败:使用定位器找不到元素:By(css选择器)