Как передать проверенный пользовательский ввод в поле ввода веб-страницы, используя Selenium и Python - PullRequest
2 голосов
/ 19 января 2020

Я хочу, чтобы пользователь набрал ее / его имя, а затем передал введенные пользователем данные в селен, чтобы он автоматически вводил их в поле поиска для моего веб-сайта. Возможен первый ввод, нажмите ввод, затем триггер селен, чтобы перенаправить ввод в браузер. Почему не работает?

from selenium import webdriver
import time

browser = webdriver.Chrome('C:/Users/acer/Desktop/chromedriver')
browser.get('website')

x = str(input('Your name: ')) #user inputs name here

if len(x) > 20: #the name van not be longer than 20 charachters
    Print(’shorter’)
    x # if longer than 20 input again

else: #if above is correct do following:
    def user():
        while True:
            time.sleep(1)
            try:
                browser.find_element_by_id('q').send_keys(x) #find input field with html id q and input the name
                browser.find_element_by_tag_name('button').click() #click next
    user()

1 Ответ

1 голос
/ 20 января 2020

Чтобы продемонстрировать передачу пользовательского ввода в поле ввода, когда имя пользователя не длиннее 20 символов, вот небольшая программа, которая выполняет следующие действия:

  • Открывает URL https://www.google.com/
  • Принимает пользовательский ввод, т.е. name
  • Подтверждает, если длина name меньше 5 символов.
    • , если true, break l oop и передать name в главную страницу Google * окно поиска.
    • , если false, continue, чтобы снова запросить ввод пользователя.
  • Кодовый блок:

    from selenium import webdriver
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.common.exceptions import TimeoutException, WebDriverException
    
    options = webdriver.ChromeOptions() 
    options.add_argument("start-maximized")
    options.add_experimental_option("excludeSwitches", ["enable-automation"])
    options.add_experimental_option('useAutomationExtension', False)
    browser = webdriver.Chrome(options=options, executable_path=r'C:\WebDrivers\chromedriver.exe')
    browser.get('https://www.google.com/')
    while True:
        name = str(input("Name please (max 5 charachters):"))
        if len(name) > 5:
            print("More than 5 charachters, please try again...")
            continue
        else:
            break
    WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.NAME, "q"))).send_keys(name)
    
  • Консольный вывод:

    Name please (max 5 charachters):asdfgh
    More than 5 charachters, please try again...
    Name please (max 5 charachters):asdfghjkl
    More than 5 charachters, please try again...
    Name please (max 5 charachters):dev
    

Этот сценарий использования

Вы можете следовать аналогичным логикам c для пользовательского ввода длиной 20 символов и блока эффективного кода будет:

from selenium import webdriver

options = webdriver.ChromeOptions() 
options.add_argument("start-maximized")
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option('useAutomationExtension', False)
browser = webdriver.Chrome(options=options, executable_path=r'C:\WebDrivers\chromedriver.exe')
browser.get('https://www.google.com/')
while True:
    name = str(input("Name please (max 20 charachters):"))
    if len(name) > 20:
        print("More than 20 charachters, please try again...")
        continue
    else:
        break
browser.find_element_by_id('q').send_keys(name) #find input field with html id q and input the name
...