如何确认来自“的结果;通过”查找元素&;使用Python和Selenium进行搜索?

如何确认来自“的结果;通过”查找元素&;使用Python和Selenium进行搜索?,python,selenium,webdriver,chromium,Python,Selenium,Webdriver,Chromium,我正在尝试自动登录,但在尝试输入我的电子邮件地址时遇到了问题 我尝试了以下Python代码行: email\u box=driver.find\u element\u by\u xpath(“//表单[1]”) 或者email\u box=驱动程序。通过链接文本(“电子邮件”)查找元素 遵循email\u box.clear()' 但是我得到一个错误元素必须是用户可编辑的,才能清除它,这表明我没有找到正确的元素。我的问题是: 有没有一种方法可以确定find\u element\u by代码找到了

我正在尝试自动登录,但在尝试输入我的电子邮件地址时遇到了问题

我尝试了以下Python代码行:
email\u box=driver.find\u element\u by\u xpath(“//表单[1]”)
或者
email\u box=驱动程序。通过链接文本(“电子邮件”)查找元素

遵循
email\u box.clear()'

但是我得到一个错误
元素必须是用户可编辑的,才能清除它
,这表明我没有找到正确的元素。我的问题是:
有没有一种方法可以确定
find\u element\u by
代码找到了哪个html元素? 或者,有没有更好的方法来查找邮箱并将我的电子邮件地址输入? (我使用的是使用Selenium 3.141.0和Chromium 74.0.3729.157的Raspbian Buster)。谢谢

  • 如果您想在页面上可视化所选元素,选择后可以在其上应用一些JS,以便查看得到的元素(调试目的)

    email\u box=driver.find\u元素\u by\u xpath(“//表单[1]”) driver.execute_脚本('arguments[0].setAttribute(“style”,“color:red;border:2px solid red;”),电子邮件\u框)

  • 驱动程序。通过链接文本(“电子邮件”)查找元素:这是错误的,因为此页面上没有文本“电子邮件”的链接(链接元素是元素)。您也无法清除元素。通常在输入端应用
    clear

  • driver.find\u element\u by_xpath(“//form[1]”)
    :这是错误的,因为这里您得到了页面上的第一个
    元素。同样,表单无法清除

  • 您看到的是:css选择器:

    表单#登录表单输入[占位符='Email']

  • 或xpath

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

  • 代码行email\u box=driver.find\u element\u by\u xpath(“//form[1]”)查找表单,而不是输入字段。您可以使用WebElement属性和方法检查:

    • get_属性(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'
    
    0 Username
    1 Email
    2 Password
    
    这就是您的浏览器找到的元素

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

    如果确定该网页将保持不变,则可以对该输入字段使用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'))
    
    输出:

    'Sign In\nI forgot my password\nSIGN IN\nCreate an account'
    
    0 Username
    1 Email
    2 Password
    
    现在你们知道有3个输入字段,第二个是email,然后是密码。假设页面保持不变,您现在可以用文本填充页面:

    input_list[1].send_keys('email@email.com')
    input_list[2].send_keys('Secret_password')
    
    您也可以自己在输入中编写一些内容,并尝试检测值(测试已经在前面的代码中):


    如果
    email\u box
    表单
    元素,这可能就是您收到错误消息的原因。可能存在一个
    input
    元素,您应该尝试查找它——这些元素通常是
    用户可编辑的
    。如果您在试图查找的
    邮箱中发布HTML,我们可以为您提供更好的帮助。