如何使用Python和Selenium确认“ find_element_by”搜索的结果?

时间:2019-10-10 20:17:25

标签: python selenium webdriver chromium

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

我尝试了以下Python代码行: toPyObjectemail_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代码找到了哪个html元素? 或者,也许有更好的方法来找到电子邮件框并输入我的电子邮件地址? (我正在使用Raspbian Buster使用Selenium 3.141.0和Chromium 74.0.3729.157进行此操作)。谢谢!

2 个答案:

答案 0 :(得分:0)

  1. 如果您想可视化页面上选定的元素,则选择后可以在其上应用一些JS,以便可以看到获得的元素(用于调试)

    email_box = driver.find_element_by_xpath(“ // form [1]”) driver.execute_script('arguments [0] .setAttribute(“ style”,“颜色:红色;边框:2px纯红色;”)',email_box)

  2. driver.find_element_by_link_text('Email'):这是错误的,因为此页面上没有文本为“ email”的LINK(LINK元素是元素)。您也无法清除元素。通常clear应用于输入。

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

    元素。再次无法清除表格。

  4. 您正在寻找的是:css选择器:

    form#login-form输入[placeholder ='Email']

或xpath

//form[@id='login-form']//input[@placeholder='Email']
  1. 同样,当您在chrome浏览器中打开页面并打开开发人员工具(F12)时,请转到“元素”标签;打开搜索(点击ctr + F),您可以在其中粘贴xpath / css选择器,然后查看选择了哪个元素

答案 1 :(得分:0)

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

  • get_attribute(name)(元素的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')