【问题标题】:Error with selenium for send_keys : str' object has no attribute 'send_keys'send_keys 的 selenium 错误:str' 对象没有属性 'send_keys'
【发布时间】:2021-02-23 19:41:11
【问题描述】:

我要用硒;我按照说明进行操作,但是当我要发送用户名和密码时出现“send_key”错误:

 runfile('C:/Users/thmag/untitled3.py', wdir='C:/Users/thmag')
    C:\Users\thmag\untitled3.py:20: DeprecationWarning: use options instead of chrome_options
      driver= webdriver.Chrome(driver_path, chrome_options = options)
    Traceback (most recent call last):
    
      File "C:\Users\thmag\untitled3.py", line 30, in <module>
        user_ele.send_keys('MyEmail@gmail.com')
    
    AttributeError: 'str' object has no attribute 'send_keys'

我的代码如下:

from selenium import webdriver
from selenium.webdriver.common.keys import  Keys
import pandas as pd
import time


driver_path = r"C:\\Program Files (x86)\\chromedriver.exe"

options = webdriver.ChromeOptions()
options.add_argument('--ignore-certificate-errors')
options.add_argument('--ignore-ssl-errors')

driver= webdriver.Chrome(driver_path, chrome_options = options)

url= "https://healthunlocked.com/"

driver.get(url)

loginpage= driver.find_element_by_id("sitebar-login-button")
loginpage.send_keys(Keys.ENTER)

user_ele = driver.find_element_by_xpath('//*[@id="email"]')
user_ele.send_keys('MyEmail@gmail.com')
user_ele.send_keys(Keys.ENTER)

pass_ele = driver.find_element_by_xpath('//*[@id="password"]')
pass_ele.send_keys('MyPass')
pass_ele.send_keys(Keys.ENTER)


time.sleep(10)

driver.quit()

【问题讨论】:

  • 你忘了初始化user_ele变量,应该是user_ele = driver.find_element_by_xpath('//*[@id="email"]')
  • 你确定那是导致该错误的行吗?
  • 我初始化了user_ele,但还是有这个错误
  • 是的,错误正是针对这一行。文件“C:\Users\thmag\untitled3.py”,第 30 行,在 user_ele.send_keys('MyEmail@gmail.com') AttributeError: 'str' object has no attribute 'send_keys'

标签: python selenium selenium-webdriver web-scraping web-crawler


【解决方案1】:

清除占位符,然后发送密钥:

from selenium import webdriver
from selenium.webdriver.common.keys import  Keys
import pandas as pd
import time

options = webdriver.ChromeOptions()
options.add_argument('--ignore-certificate-errors')
options.add_argument('--ignore-ssl-errors')

driver= webdriver.Chrome(options = options)

url= "https://healthunlocked.com/"

driver.get(url)

# closing cookies thing 
driver.find_element_by_id('ccc-notify-accept').click()

loginpage= driver.find_element_by_id("sitebar-login-button").click()

time.sleep(3)

user_ele = driver.find_element_by_id('email')
user_ele.clear()
user_ele.send_keys('MyEmail@gmail.com')

pass_ele = driver.find_element_by_xpath('//*[@id="password"]')
pass_ele.clear()
pass_ele.send_keys('MyPassword')

# submitting
driver.find_element_by_xpath('/html/body/div[3]/div/div[1]/div/div/section/div[1]/form/button').click()
time.sleep(10)

driver.quit()  

如果你只是想登录,可以使用 requests 发送 post 请求

【讨论】:

  • 非常感谢,它运行良好。你能请我帮我写一个代码来点击日志页面上的日志按钮吗?我已尝试运行代码,但日志记录按钮出现相同的错误。
  • @TaherehMaghsoudi,我已经用更好的方法更新了代码,因为其他方法在提交时不起作用
【解决方案2】:

使用选项而不是 chrome 选项并设置 user_ele。

from selenium.webdriver.chrome.options import Options
options = Options()
options.add_argument('--ignore-certificate-errors')
options.add_argument('--ignore-ssl-errors')

driver= webdriver.Chrome(driver_path, options = options)

url= "https://healthunlocked.com/"

driver.get(url)

loginpage= driver.find_element_by_id("sitebar-login-button")
loginpage.send_keys(Keys.ENTER)

user_ele = driver.find_element_by_xpath('//*[@id="email"]')
user_ele.send_keys('MyEmail@gmail.com')
user_ele.send_keys(Keys.ENTER)

pass_ele = driver.find_element_by_xpath('//*[@id="password"]')
pass_ele.send_keys('MyPass')
pass_ele.send_keys(Keys.ENTER)

【讨论】:

  • 我按照你的评论做了,但还是有那个错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-06
  • 2022-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-09
相关资源
最近更新 更多