首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在python selenium中单击按钮后在网页上找到元素

如何在python selenium中单击按钮后在网页上找到元素
EN

Stack Overflow用户
提问于 2021-11-22 15:01:57
回答 1查看 266关注 0票数 3

我是一个新的Python程序员。最近,我开始从事自动化/刮擦工作。目前,我被困在一种情况下,一个页面出现在按钮后,我无法找到该页面上的元素。

代码语言:javascript
运行
复制
from selenium import webdriver

from selenium.webdriver.support.ui import Select

import time


driver = webdriver.Chrome(r"/Users/prateep/Downloads/chromedriver")

driver.get("https://example.com")

driver.maximize_window()

time.sleep(10)

button = driver.find_element_by_class_name("a-IRR-buttons")

button.click()

time.sleep(5)

driver.find_element("P52_NAME").send_keys("Test!!!")

selectStatus = Select(driver.find_element("P52_ASSESSMENT_STATUS_ID"))

selectStatus.select_by_value("O - Open")

driver.close()

输出:-

代码语言:javascript
运行
复制
driver.find_element_by_name("P52_NAME").send_keys("Test!!!")
Traceback (most recent call last):
  File "/Users/prateep/Aegis_Automation/Aegis_Automation.py", line 25, in <module>
    driver.find_element_by_name("P52_NAME").send_keys("Test!!!")
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/selenium/webdriver/remote/webdriver.py", line 658, in find_element_by_name
    return self.find_element(by=By.NAME, value=name)
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/selenium/webdriver/remote/webdriver.py", line 1238, in find_element
    return self.execute(Command.FIND_ELEMENT, {
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/selenium/webdriver/remote/webdriver.py", line 418, in execute
    self.error_handler.check_response(response)
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/selenium/webdriver/remote/errorhandler.py", line 243, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"[name="P52_NAME"]"}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-22 16:49:58

问题在这条线上

代码语言:javascript
运行
复制
driver.find_element("P52_NAME").send_keys("Test!!!")

你使用find_element是错误的。

让我们看看在find_element内部有什么

代码语言:javascript
运行
复制
def find_element(self, by=By.ID, value=None):
    """
    Find an element given a By strategy and locator. Prefer the find_element_by_* methods when
    possible.

    :Usage:
        element = driver.find_element(By.ID, 'foo')

    :rtype: WebElement
    """
    if self.w3c:
        if by == By.ID:
            by = By.CSS_SELECTOR
            value = '[id="%s"]' % value
        elif by == By.TAG_NAME:
            by = By.CSS_SELECTOR
        elif by == By.CLASS_NAME:
            by = By.CSS_SELECTOR
            value = ".%s" % value
        elif by == By.NAME:
            by = By.CSS_SELECTOR
            value = '[name="%s"]' % value
    return self.execute(Command.FIND_ELEMENT, {
        'using': by,
        'value': value})['value']

正如你所看到的,我们必须用它

  1. By.ID
  2. By.CLASS_NAME
  3. By.TAG_NAME
  4. By.LINK_TEXT
  5. By.PARTIAL_LINK_TEXT
  6. By.NAME
  7. By.CSS_SELECTOR
  8. By.XPATH

如果P52_NAME是名称,并且它是唯一的,并且在HTMLDOM中表示所需的元素,那么理想情况下您应该使用

代码语言:javascript
运行
复制
driver.find_element(By.NAME, "P52_NAME").send_keys("Test!!!")

请签入dev tools (Google ),如果我们在HTML DOM中有唯一的条目。

检查的步骤:

Press F12 in Chrome ->转到element部分-> do a CTRL + F ->,然后粘贴NAME并查看所需的element是否使用1/1匹配节点得到高亮显示

更新:

代码语言:javascript
运行
复制
wait = WebDriverWait(driver, 30)
wait.until(EC.frame_to_be_available_and_switch_to_it((By.XPATH, "iframe xpath")))
wait.until(EC.visibility_of_element_located((By.ID, ""))).send_keys("")

导入:

代码语言:javascript
运行
复制
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70067869

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档