如何使用python中的selenium将整个文本发送到文本区域而不是逐行发送?

时间:2018-06-04 11:32:33

标签: python python-3.x selenium selenium-webdriver webdriver

我的代码将文本输入到网页的文本区域,逐行输入,如何让它一次性插入整个文本,是否有解决方案? 因为逐行需要花费很多时间

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

2 个答案:

答案 0 :(得分:1)

要使用selenium通过 Python 将整个文本块发送到<textarea>以加快进程,您可以注入脚本并使用以下解决方案:

  • 代码块:

    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()
    

浏览器快照:

ChunkOfText

答案 1 :(得分:0)

您可以通过JavaScript DOM API以静默方式更改textbox / textarea的文本,而不是从前端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)