如何确认来自“的结果;通过”查找元素&;使用Python和Selenium进行搜索?
我正在尝试自动登录,但在尝试输入我的电子邮件地址时遇到了问题 我尝试了以下Python代码行:如何确认来自“的结果;通过”查找元素&;使用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代码找到了
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,我们可以为您提供更好的帮助。