我正在使用 Selenium Webdriver for python,目前在 Chrome 浏览器上使用,并且我一直陷入这种特定库的奇怪情况。我想在 Pipedrive 中提取一些信息(当前能够登录并搜索网页内的特定线索,但是当我尝试提取人名时出现此异常:Traceback (most recent call last): File "C:/Users/ppbbd/PycharmProjects/fastTasks/pipeforwpp.py", line 27, in <module> info_box = driver.find_element_by_xpath("//div[@class='widget personFields fieldsView '][@data-state='read']") File "C:\Users\ppbbd\AppData\Local\Continuum\anaconda3\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 394, in find_element_by_xpath return self.find_element(by=By.XPATH, value=xpath) File "C:\Users\ppbbd\AppData\Local\Continuum\anaconda3\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 978, in find_element 'value': value})['value'] File "C:\Users\ppbbd\AppData\Local\Continuum\anaconda3\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute self.error_handler.check_response(response) File "C:\Users\ppbbd\AppData\Local\Continuum\anaconda3\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response raise exception_class(message, screen, stacktrace)selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//div[@class='widget personFields fieldsView '][@data-state='read']"} (Session info: chrome=80.0.3987.149)我搜索了这个异常,主要原因之一是动态页面和页面中元素的加载时间并不全部同时,所以我只是用来测试time.sleep(10)是否是这种情况,但我仍然收到上面显示的错误。重要提示:这是 html 的一个片段,如果您查看代码末尾,您会发现注释 info_box_a = driver.find_element_by_xpath("//div[@class='fieldsList read']")工作正常,并且正如您在图像中看到的那样,这个特定的 div 位于有问题的 div 内,所以 Selenium 怎么可能无法找到父级但其子级? HTML 片段页面来源:我无法将其发布在这里,因为它会绕过 30k 字符限制,并且源页面位于登录区域内,因此即使我发布网址,除非您在 Pipedrive 上有帐户,您也看不到页面源(如果我错了请纠正我)。任何显示另一个 html 片段的建议我可以更新问题。更新:正如您在下面的链接中看到的,一个人的电话类别值的具体信息class="item read phoneField editable "上有这么多空格,这是否会妨碍查找该元素?或者class="item read phoneField editable"意思完全一样吗?重要的 HTML 片段
1 回答
开满天机
TA贡献1786条经验 获得超13个赞
尝试使用下面的 xpath,我们将类中的空格规范化。
//div[normalize-space(@class)='widget personFields fieldsView'][@data-state='read']
z
您可以按如下方式更新您的 info_box。
info_box = driver.find_element_by_xpath("//div[normalize-space(@class)='widget personFields fieldsView'][@data-state='read']")
- 1 回答
- 0 关注
- 91 浏览
添加回答
举报
0/150
提交
取消