【问题标题】:Using selenium in a function leads to TypeError在函数中使用 selenium 会导致 TypeError
【发布时间】:2020-03-04 23:06:30
【问题描述】:

我想登录多个网站,所以我尝试实现一个功能代码。下面的程序代码有效。

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import time


options = Options()
chrome_path = "T:/User/WebScrapingExample/Chromedriver/chromedriver.exe"
driver = webdriver.Chrome(executable_path=chrome_path,chrome_options=options)
driver.set_window_size(1280, 720) 
driver.get("https://testwebsite/#/")
time.sleep(5)
user = driver.find_element_by_css_selector("input[type=text]")
password = driver.find_element_by_css_selector("input[type=password]")
user.send_keys("xxx")
password.send_keys("xxx")
driver.find_element_by_css_selector("button[type=submit]").click()

下面的代码不起作用并返回以下错误:

文件 "C:\Users\user\AppData\Local\Continuum\anaconda4\lib\site-packages\selenium\webdriver\remote\webelement.py", 第 478 行,在 send_keys 中 {'text': "".join(keys_to_typing(value)),

文件 "C:\Users\langma\AppData\Local\Continuum\anaconda4\lib\site-packages\selenium\webdriver\common\utils.py", 第 150 行,在 keys_to_typing 中 for i in range(len(val)):

TypeError: 'WebElement' 类型的对象没有 len()

def login(link, username, password, userinput, passwordinput, submitbtn):

        from selenium import webdriver
        from selenium.webdriver.chrome.options import Options

        options = Options()
        chrome_path = "T:/user/WebScrapingExample/Chromedriver/chromedriver.exe"
        driver = webdriver.Chrome(executable_path=chrome_path,chrome_options=options)
        driver.set_window_size(1280, 720) 
        driver.get(link)
        time.sleep(5)
        user = driver.find_element_by_css_selector(userinput)
        password = driver.find_element_by_css_selector("input[type=password]")
        user.send_keys(username)
        password.send_keys(password)
        driver.find_element_by_css_selector(submitbtn).click()

login(link = "https://testwebsite.com/#/", username = "xxx", password = "xxx", userinput = "input[type=text]", passwordinput = "input[type=password]", submitbtn = "button[type=submit]")

我猜在函数内部导入也是不好的做法,对吧?有人可以帮我让它运行吗?

【问题讨论】:

  • 为什么要导入选项?我在您的代码中找不到任何选项设置。也许这是不必要的。我也找不到你在哪里调用 len()。你能粘贴整个错误信息吗?
  • 是的,也许我不调用选项,但这应该没关系。更新了帖子:)

标签: python function selenium


【解决方案1】:

我认为你的 CSS 元素选择器是错误的。

userinput = "input[type='text']", passwordinput = "input[type='password']", submitbtn = "button[type='submit']"

然后你将密码(元素)发送到密码(元素)。

password = driver.find_element_by_css_selector("input[type=password]")
user.send_keys(username)
password.send_keys(password)

尝试如下修改。

password_ele = driver.find_element_by_css_selector(passwordinput)
user.send_keys(username)
password_ele.send_keys(password)  # this password is string from argument

【讨论】:

    猜你喜欢
    • 2018-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-12
    • 1970-01-01
    • 1970-01-01
    • 2016-09-04
    相关资源
    最近更新 更多