Shricharan Arumugam
Shricharan Arumugam

Reputation: 155

How to send entire text into a text area using selenium in python instead of sending it line by line?

My code inputs text into the text area of the web page , line by line, how to make it insert the entire text all at once instead, is there a solution for this? because line by line takes a lot of time

def Translated_Content(content):

    driver= webdriver.Chrome("C:\\Users\\shricharan.arumugam\\Desktop\\PDF2txt\\chromedriver.exe")
    driver.get('https://translate.shell.com/')

    input_box = driver.find_element_by_id('translateText')
    input_box.send_keys(content)

    translate_button = driver.find_element_by_id('translate')
    translate_button.click()
    translated_text_element= driver.find_element_by_id('translatedText')
    time.sleep(4)


    translated_text=translated_text_element.get_attribute('value')

    driver.close()

    return translated_text

Upvotes: 3

Views: 3443

Answers (2)

undetected Selenium
undetected Selenium

Reputation: 193088

To send the entire chunk of text into the <textarea> using selenium through Python to speed up the process you can inject a script and use the following solution:

  • Code Block:

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    myText = """No, there is no way to hide the console window of the chromedriver.exe 
        in the .NET bindings without modifying the bindings source code. This is seen 
        as a feature of the bindings, as it makes it very easy to see when your code 
        hasn't correctly cleaned up the resources of the ChromeDriver, since the console window 
        remains open. In the case of some other languages, if your code does not properly clean up 
        the instance of ChromeDriver by calling the quit() method on the WebDriver object, 
        you can end up with a zombie chromedriver.exe process running on your machine.""" 
    options = webdriver.ChromeOptions() 
    options.add_argument("start-maximized")
    options.add_argument('disable-infobars')
    driver=webdriver.Chrome(chrome_options=options, executable_path=r'C:\Utility\BrowserDrivers\chromedriver.exe')
    driver.get('https://translate.shell.com/')
    translate_from = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "textarea.form-control#translateText")))
    translate_from._parent.execute_script("""
        var elm = arguments[0], text = arguments[1];
        if (!('value' in elm))
          throw new Error('Expected an <input> or <textarea>');
        elm.focus();
        elm.value = text;
        elm.dispatchEvent(new Event('change'));
        """, translate_from, myText)
    driver.find_element_by_css_selector("input#translate").click()
    

Browser Snapshot:

ChunkOfText

Upvotes: 1

yong
yong

Reputation: 13712

You can change the text of textbox/textarea through JavaScript DOM API in silent way, not from front UI:

long_string= <the long string>
input_box = driver.find_element_by_id('translateText')
driver.execute_script('arguments[0].value=arguments[1]', input_box, long_string)

Upvotes: 6

Related Questions