【问题标题】:How to confirm results from “find_element_by” search using Python and Selenium?如何使用 Python 和 Selenium 确认“find_element_by”搜索的结果?
【发布时间】:2019-10-10 20:17:25
【问题描述】:

我正在尝试自动登录到https://auth.tesla.com/login,但在尝试输入我的电子邮件地址时遇到了困难。

我已经尝试过这些 Python 代码行: email_box = driver.find_element_by_xpath("//form[1]")email_box = driver.find_element_by_link_text('Email') 关注email_box.clear()'

但是我收到了一个错误Element must be user-editable in order to clear it,这表明我没有找到正确的元素。我的问题: 有没有办法确定 find_element_by 代码找到了哪个 html 元素? 或者也许有更好的方法来找到邮箱并输入我的电子邮件地址? (我正在使用 Selenium 3.141.0 和 Chromium 74.0.3729.157 对 Raspbian Buster 进行此操作)。谢谢!

【问题讨论】:

  • 如果 email_boxform 元素,这可能就是您收到错误消息的原因。可能有一个input 元素,您应该尝试定位——这些通常是user-editable。如果您发布要查找的 email_box 的 HTML,我们可以为您提供更好的帮助。

标签: python selenium webdriver chromium


【解决方案1】:
  1. 如果你喜欢在页面上可视化被选中的元素,选择后你可以在上面应用一些JS,这样你就可以看到你得到了哪个元素(调试目的)

    email_box = driver.find_element_by_xpath("//form[1]") driver.execute_script('arguments[0].setAttribute("style", "color: red; border: 2px solid red;")', email_box)

  2. driver.find_element_by_link_text('Email'):这是错误的,因为此页面上没有带有文本“电子邮件”的 LINK(LINK 元素是 元素)。你也不能清除 元素。通常clear 应用于输入。

  3. driver.find_element_by_xpath("//form[1]"): 这是错误的,因为这里你得到了页面上的第一个

    元素。再次无法清除表单。
  4. 你在看的是:css选择器:

    form#login-form input[placeholder='Email']

或者xpath

//form[@id='login-form']//input[@placeholder='Email']
  1. 此外,当您在 chrome 浏览器中打开页面并打开开发人员工具 (F12) 时,转到元素选项卡;打开搜索(单击 ctr + F),您可以将 xpath/css 选择器粘贴到那里,然后查看选择了哪个元素

【讨论】:

    【解决方案2】:

    您的代码行 email_box = driver.find_element_by_xpath("//form[1]") 查找表单,而不是输入字段。您可以使用 WebElement 属性和方法进行检查:

    • get_attribute(name)(元素名称属性的值)
    • text(元素内的文本,比如hello中的'hello')

    例子:

    from selenium import webdriver
    from selenium.webdriver.common.keys import Keys
    
    email_box = driver.find_element_by_xpath("//form[1]")
    print(email_box.text)
    

    输出:

    'Sign In\nI forgot my password\nSIGN IN\nCreate an account'
    

    这就是你的 browser.find_element_by_xpath("//form[1]") 找到的。

    有很多方法可以访问此电子邮件字段并对其进行测试。

    如果您确定,该网页将保持不变,您可以为该输入字段使用 XPATH:

     xp='/html/body/div[2]/div/form/div[1]/div/div[2]/input'
     email_box = driver.find_element_by_xpath(xp)
     email_box.send_keys('Test')
    

    另一种方法是收集所有输入并识别它们。这更多是为了了解什么是什么,而不是直接查找和使用电子邮件字段。 :

    input_list = driver.find_elements_by_class_name("input")
    for field in input_list:
        print(input_list.index(i), i.get_attribute('placeholder'))
    

    输出:

    0 Username
    1 Email
    2 Password
    

    所以现在您知道有 3 个输入字段,第二个是电子邮件,然后是密码。假设该页面将保持不变您现在可以用文本填充它们:

    input_list[1].send_keys('email@email.com')
    input_list[2].send_keys('Secret_password')
    

    您也可以在输入中自己写一些东西并尝试检测值(测试已经从以前的代码中):

     xp='/html/body/div[2]/div/form/div[1]/div/div[2]/input'
     email_box = driver.find_element_by_xpath(xp)
     email_box.get_attribute('value')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-04
      • 1970-01-01
      • 2020-11-23
      • 2019-12-20
      • 2020-04-03
      相关资源
      最近更新 更多