Использование селена в функции приводит к TypeError - PullRequest
0 голосов
/ 08 ноября 2019

Я хочу войти на несколько веб-сайтов, поэтому я пытаюсь реализовать код функции. Процедурный код ниже работает.

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 для i в диапазоне (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]")

Я полагаю, импорт внутри функции - это тоже плохая практика, верно? Может кто-нибудь помочь мне запустить это?

1 Ответ

0 голосов
/ 08 ноября 2019

Я думаю, что ваш 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...