【问题标题】:Python Selenium Unable to acquire elementPython Selenium 无法获取元素
【发布时间】:2021-04-05 05:50:46
【问题描述】:

我正在尝试编写一个程序来自动化加入 Webex 会议的整个过程。但是,在阅读了有关如何通过 id、Xpath 等获取元素的文档后,似乎没有任何效果。

from selenium import webdriver

PATH = "C:\Program Files (x86)\chromedriver.exe"
driver = webdriver.Chrome(PATH)

driver.get("link")

element = driver.find_element_by_ #?#

element.send_keys("some text")

HTML:

我想我的问题是:如何获取适当的元素以添加我的名字?

【问题讨论】:

标签: python selenium xpath css-selectors webdriverwait


【解决方案1】:

使用类名

browser.find_element_by_class_name("style-input-2nuAK undefined")

【讨论】:

  • element.send_keys("sometext") AttributeError: 'list' object has no attribute 'send_keys 我似乎得到了这个错误任何想法?这是来自 selenium 的代码 import webdriver PATH = "C:\Program Files (x86)\chromedriver.exe" driver = webdriver.Chrome(PATH) driver.get("link") element = driver.find_elements_by_class_name("style-input -2nuAK undefined") element.send_keys("sometext")
  • 您正在使用find_elements_by_class_name,它返回一个网络元素列表,因此您不能在那里使用send_keys 方法。将其更改为 find_element_by_class_name(单数)。
  • @MikeCode 'Traceback(最近一次调用最后):文件“C:\Users\Γιώργος\Desktop\Wx.py”,第 9 行,在 element = driver.find_element_by_class_name('style -input-2nuAK undefined') 文件“C:\Users\Γιώργος\AppData\Local\Programs\Python\Python37-32\lib\site-packages\selenium\webdriver\remote\webdriver.py”,第 564 行,在 find_element_by_class_name返回 self.find_element(by=By.CLASS_NAME, value=name) 文件“C:\Users\ιώργος\AppData\Local\Programs\Python\Python37-32\lib\site-packages\selenium\webdriver\remote\webdriver. py",第 978 行,在 find_element 'value': value})['value']'
  • 文件“C:\Users\Γιώργος\AppData\Local\Programs\Python\Python37-32\lib\site-packages\selenium\webdriver\remote\webdriver.py”,第 321 行,在执行 self.error_handler.check_response(response) 文件“C:\Users\Γιώργος\AppData\Local\Programs\Python\Python37-32\lib\site-packages\selenium\webdriver\remote\errorhandler.py”,第 242 行,在 check_response 中引发 exception_class(message, screen, stacktrace)
  • selenium.common.exceptions.NoSuchElementException:消息:没有这样的元素:无法找到元素:{"method":"css selector","selector":".style-input-2nuAK undefined" (会话信息:chrome=87.0.4280.88)我不知道这个错误我应该做什么?
【解决方案2】:

要向元素发送字符序列,您可以使用以下任一Locator Strategies

  • 使用css_selector

    driver.find_element_by_css_selector("input.undefined[placeholder='Your full name']").send_keys("George")
    
  • 使用xpath

    driver.find_element_by_xpath("//input[contains(@class, 'undefined') and @placeholder='Your full name']").send_keys("George")
    

理想情况下,要将字符序列发送到您需要为element_to_be_clickable()诱导WebDriverWait的元素,您可以使用以下Locator Strategies之一:

  • 使用CSS_SELECTOR

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input.undefined[placeholder='Your full name']"))).send_keys("George")
    
  • 使用XPATH

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[contains(@class, 'undefined') and @placeholder='Your full name']"))).send_keys("George")
    
  • 注意:您必须添加以下导入:

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

【讨论】:

  • 我还需要安装其他东西吗?
  • 我认为你不需要安装任何东西,除非你使用 Nuget 包。使用 Nuget 包,您可能需要 SeleniumExtras.WaitHelpers 包。
  • Traceback(最近一次调用最后):文件“C:\Users\Γιώργος\Desktop\Wx.py”,第 12 行,在 WebDriverWait(driver, 20).until(EC. element_to_be_clickable((By.XPATH, "//inut[contains(@class, 'undefined') and @placeholder='Your full name']"))).send_keys("George") File "C:\Users\Γιώργος \AppData\Local\Programs\Python\Python37-32\lib\site-packages\selenium\webdriver\support\wait.py",第 80 行,直到引发 TimeoutException(message, screen, stacktrace) selenium.common.exceptions。 TimeoutException:消息:我得到这个错误任何想法我做错了什么?
  • from selenium import webdriver PATH = "C:\Program Files (x86)\chromedriver.exe" driver = webdriver.Chrome(PATH) driver.get('link') element = driver.find_elements_by_class_name( 'style-input-2nuAK undefined') element.send_keys('sometext') 也试过这个,但后来我得到这个错误: Traceback(最近一次调用最后一次):文件“C:\Users\Γιώργος\Desktop\Wx.py” ,第 10 行,在 element.send_keys('sometext') AttributeError: 'list' object has no attribute 'send_keys'
【解决方案3】:

CSS 用于元素

input[placeholder="你的电子邮件地址"]

driver.find_element_by_css_selector("input[placeholder="Your email address"]").send_keys("George")
元素的

XPath

//输入[@placeholder="你的电子邮件地址"]

driver.find_element_by_xpath("//input[@placeholder="Your email address"]").send_keys("George")

【讨论】:

    【解决方案4】:

    尝试使用以下代码。我已使用公开登录页面对此进行了测试

    driver = webdriver.Chrome()
    driver.implicitly_wait(5)
    driver.get("https://signin.webex.com/signin")
    email_input = driver.find_element_by_xpath("//div[@class='el-input']/input")
    email_input.clear()
    email_input.send_keys('test@test.com')
    driver.find_element_by_xpath("//button[@class='el-button next el-button--primary']").click()
    driver.find_element_by_xpath("//span[contains(text(),'meetingsamer37.webex.com')]").click()
    driver.find_element_by_id("continue-button").click()
    password_input = driver.find_element_by_xpath("//input[@aria-label='Password']")
    password_input.send_keys('test')
    driver.find_element_by_xpath("//button[@class='el-button next el-button--primary']").click()
    

    【讨论】:

    • 显然我需要添加 driver.switch_to.frame("pbui_iframe") 然后通过 xpath 定位元素。感谢您花时间解释
    猜你喜欢
    • 2020-05-30
    • 1970-01-01
    • 2021-07-04
    • 1970-01-01
    • 2022-01-03
    • 2021-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多