【问题标题】:Python Selenium Webdriver selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate elementPython Selenium Webdriver selenium.common.exceptions.NoSuchElementException:消息:没有这样的元素:无法找到元素
【发布时间】:2020-09-08 17:30:16
【问题描述】:

我知道我的问题很常见。但是,尽管我在 Google 和 SO 上进行了大力搜索,但我一直无法找到任何可以帮助我解决 Python Selenium 问题的方法,并出现上述错误消息“无法定位元素”。我访问的几乎所有线程都是关于切换帧的。我在我的网站上找不到任何类型的框架标签。

问题是我正在尝试选择一个输入字段,以便我可以 send_keys 但 selenium 无法找到该元素。该元素具有以下 XPath:

'//*[@id="app-root"]/div/div[2]/div/div[1]/div[2]/div[2]/div[1]/div[2]/div/input'

以下是我拥有的代码:

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

driver = webdriver.Chrome('./chromedriver')  # Optional argument, if not specified will search path.
driver.get(site_url);

time.sleep(5)
delivery_number = driver.find_element_by_xpath('//*[@id="app-root"]/div/div[2]/div/div[1]/div[2]/div[2]/div[1]/div[2]/div/input')

driver.quit()

我无法选择带有上述引用的元素。 xpath 不太可能有错误,因为它是从 chrome 开发工具复制的。

我尝试在 find_element 行之前使用它也无济于事:

element = WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.XPATH, '//*[@id="app-root"]/div/div[2]/div/div[1]/div[2]/div[2]/div[1]/div[2]/div/input')))

对于使用屏幕截图,我提前道歉,因为页面源不能准确地代表页面,但请参阅下面的元素截图。

如果有帮助,这是页面来源:

<!DOCTYPE html>
<html>
<head lang="zh-cn">
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="description" content="">
    <meta name="keywords" content="">
    <meta name="viewport" content="width=device-width,initial-scale=1">
    <title>Nestia F&B</title>
    <meta name="renderer" content="webkit">
    <!-- No Baidu Siteapp-->
    <meta http-equiv="Cache-Control" content="no-siteapp"/>
    <meta name="apple-mobile-web-app-title" content=""/>
    <meta name="apple-mobile-web-app-capable" content="yes">
    <meta name="apple-mobile-web-app-status-bar-style" content="black">
    <link rel="stylesheet" href="/static/css/ui/amazeui.min.css"/>
    <link rel="stylesheet" href="/static/css/app.css"/>
    <link rel="stylesheet" href="/static/css/patch.css"/>
    <link rel="stylesheet" href="/static/css/bootstrap.min.css">
    <link rel="stylesheet" href="/static/css/videoplayer.css">
    <link rel="stylesheet" href="/static/css/movies.css">
</head>
<body>
<div id="app-root">
    <div style="width:100%;text-align: center">
        <img src="static/img/loading.gif"/>
    </div>
</div>

<script src="/static/scripts/app.bundle.20200907180756.js"></script>
</body>
</html>

感谢您阅读到这里。一些帮助将不胜感激。 :)

【问题讨论】:

    标签: python selenium selenium-webdriver


    【解决方案1】:

    使用WebDriverWait() 和element_to_be_clickable() 并使用xpathcss selector

    XPATH

    element = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, '//div[@class="am-form-group item-input"]/input')))
    

    CSS 选择器

    element = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, 'div.item-input>input')))
    

    【讨论】:

    • 嗨@KunduK,谢谢你的回答。编程不再显示找不到元素的错误。但是,我有一个问题,那就是我尝试了 send_keys 但没有发送任何内容。该字段保持为空。下面是我的代码: delivery_number = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, '//div[@class="am-form-group item-input"]/input'))) deliveryyy_number .send_keys("Hello") time.sleep(5) driver.quit() 程序在运行最后一行后结束。没有错误信息就结束了。
    • 嗨@KunduK,感谢您分享答案。该程序现在似乎能够选择该项目。但是 send_keys 似乎没有像我做 send_keys 时那样工作,没有向该元素发送任何内容。你有什么主意吗?没有错误消息,程序似乎只是跳过了那行代码。
    • 您需要分享您的网址以进行进一步调查吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多